2016年8月27日 星期六

[學習] 看完保哥Git教學(17)

git merge  有遇到衝突時,即不同分支改到同一檔案的同一行時,又要做Merge的時候就會產生衝突。

善用GUI軟體,SourceTree..

記得操作是Clone/New按下去後,選擇Add Working Copy,再選工作目錄資料夾(Repository)。就可以出漂亮的樹狀圖了。


* git merge [other_branchname]
* git checkout -b [new_branchname]
* git reflog             找紀錄
* git branch -d [branchname]      刪掉已被合併過的分支
* git branch -D [branchname]      刪掉未合併的分支
* git branch feature <SHA1>
* git reset --hard ORIG_HEAD     回覆到最新Commit的上一個commit
* git status
* git ls-files -u            看哪個檔案衝突
* git diff [filepath]           比較衝突檔案

[Git] reset 在不同commit之間跳來跳去,檔案變化

 git reset [commit ID] 和 git reset --hard [commit ID] 差別
PS: 如果不知道跳到哪裡了,請善用reflog
http://ithelp.ithome.com.tw/articles/10138150

狀況 1: 今天有5個commits,心血來潮想回去第3個commit
-- 確認工作目錄 git status 都乾淨
使用git reset [third commit ID] 或 git reset --hard [third commit ID]
結果:都順利回去第3個commit,沒有其他訊息。

狀況2.1:承上,在第3個commit裡面做檔案新增/修改,也沒git commit,再回去最新的commit
git reset [newest commit ID] :剛剛的檔案被保留並屬於unstaged狀態*(未放在索引)
             有git commit也一樣會被改成unstaged
git reset --hard [newest commit ID]:剛剛的檔案會被忽略(刪掉),強迫回到最新commit狀態

狀況2.2:反過來,在最新的commit做檔案新增/修改(沒commit),跳回第3個commit
git reset [third commit ID]:檔案會被帶進來屬於unstaged狀態;就算有commit也一樣會被變成unstaged狀態保留下來。

狀況3: 在第3個commit建立新分支,沒做任何動作就跳到第2個commit或回最新的commit
兩種指令結果: 分支自動被延伸到所跳到的commit
=>這種特性可以救回被刪掉的分支,如狀況4說明

狀況4: 在最新的commit刪掉分支  git branch -d(or -D) [被刪分支],後悔了想救回來
使用兩種 git reset 指令回到[被刪分支]存在的commit,這樣就救回來了。


狀況5:不知道跳到哪個commit了,想直接跳到最新的commit
=> 善用git reflog 找紀錄....它很強大,Git預設紀錄至少30天,刪除reflog也無法全刪,只能一筆一筆刪,刪了不會影響commit。



2016年8月26日 星期五

[Git] 跟Bitbucket有關的整理

在本機用cmd設好remote路徑,但push一直被reject如下
git push -u origin master
To https://Ray2016@bitbucket.org/document_ray/fileupload.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to ...

註: http://goo.gl/hn58v6
-u 就是Upstream 如果遠端沒有任何檔案,那第一次都要下下面指令再push
git branch --set-upstream
不然就是用一行解決
git push -u origin my_branch

解決:
git fetch 遠端路徑       => 拉下最新分支
git remote add [遠端路徑別名]  [路徑]    => 設定遠端路徑
git pull --rebase [別名] master        => 重新定義參考基準
接下來就可以用 git push [別名] master


如何清理Bitbucket上面的commit紀錄
一般對本機的檔案,我們都用git revert [commit ID]回到某一版,就會清掉其他commit...注意是那些commit就消失了。

遠端的Bitbucket,也是一樣道理
git reset --hard [遠端commit ID] => 重置版本
git push -f           => 強迫更新,就達到上面的方式了

更多回復版本的作法還要多練習,清掉commit紀錄也是。
另外有一點好事,本機的新增的檔案只要還沒commit,那版本怎樣回復,不會被影響到那些檔案。可以再玩看看。



查看遠端路徑設定、修改遠端別名
git remote -v
git remote set-url [別名] [新路徑]
https://help.github.com/articles/changing-a-remote-s-url/

2016年8月23日 星期二

[思考] 設計第0步的對話

丫壹 這就是為什麼我要先做「設計」
Elaine 這裡怎麼設計
丫壹 這樣子下去,他所耗的時間都是白工
Elaine 在這裡我還是很不懂你那一天覺得我們已經在想SQL這件事情為什麼就已經在寫CODE了
Elaine 我自己昨天是稍微寫了一下,是按照那天你說的方式去寫
Elaine 確實很順。但我還是不明白
丫壹 重點在於
丫壹 你在接到需求時
丫壹 是在想你是要「哪些資料集合」,還是「哪一張表」
Elaine 我想的是哪一張表
Elaine 哪些表
Elaine 需要
丫壹 前面是抽象設計,後面實作設計
丫壹 如果你一個資料集合是好幾張表組合起來呢
Elaine 所以是哪些表我需要
丫壹 這樣就直接深入「實作」了丫
丫壹 如果code本來不是你寫的,你怎麼在那個時間知道哪一張表
Elaine 不知道,所以要找跟問
丫壹 那是不是變成你在規劃時,又要一邊確認一邊規劃
丫壹 那為何不先利用一些抽象的資料集合概念
丫壹 先知道總共需要哪些資料群
丫壹 這些資料群有什麼樣的關係,或是邏輯計算
Elaine 像是EMP資料,請假資料。這種資料群?
丫壹 對
丫壹 然後在把這個結果去對應到實際的表格之中
丫壹 這樣不是比較明確嗎
丫壹 簡單講一個原則
丫壹 只要你們不是從一個全面的抽象角度去思考
丫壹 而是一直要知道「實際的東西」在哪去才能思考
丫壹 那一 定會一直遇到問題,或是少東西
丫壹 因為你根本不知道全部應該要有多少東西
丫壹 最直接的一個舉例
丫壹 如果我們在拼圖時,不給最後拼圖來的全圖
丫壹 會發生什麼事
Elaine 不能拼阿
丫壹 但你們現在都在這樣子「拼圖」丫
丫壹 還拼的很開心呢
丫壹 ray 的這張報表
丫壹 是一個很基本的東西
丫壹 如果是寫「庫存報表」,你看看你怎麼用那麼細節的資訊來做
丫壹 如果功能是複雜到有關係,又有計算,上下筆資料也有關係的情況下
丫壹 有什麼方式去思考,會差距很多
丫壹 最直接會發生的狀況就是
Elaine 做出來的不是要的
丫壹 你們只能用程式碼去問問題
丫壹 哈,用硬來的也能用出個結果丫
Elaine 恩。以前寫的報表確實都會在程式面上來做最後處理
Elaine 因為sql寫不好~哈
丫壹 所以結論就是
Elaine 或是指能處理一部分
丫壹 你要用別的方式來補那個洞
丫壹 然後愈補又愈大洞
Elaine so trouble
丫壹 這點就是我跟你們在開發跟debug的速度差異最大的地方

2016年8月19日 星期五

[學習] Git (13) stash 暫存工作目錄與索引變更

指令
* git stash          儲存modified、staged狀態的檔案
* git stash save        跟上面一樣
* git stash -u         儲存所有檔案含untracked
* git stash save -u       跟上面一樣
* git stash list         顯示所有暫存清單
* git stash pop         回覆到最新的暫存檔儲存狀態並把該暫存檔刪掉
* git stash apply        回覆到最新的暫存檔儲存狀態並留下該暫存檔
* git stash pop "stash@{id}"   回復到指定的暫存檔儲存狀態並把該暫存檔刪掉
* git stash apply "stash@{id}"  回復到指定的暫存檔儲存狀態並留下該暫存檔
* git stash drop "stash@{id}"   刪除指定暫存檔
* git stash clear         清空所有暫存檔

[YEZZ]建置開發環境走過去的坑

下了一個新環境,建了新資料庫。登入人員的帳密建立就要注意,密碼是有被加密編碼的。
相關的資料表要補的資料還是要補這樣。

舊專案的首頁登入路徑還是錯的。

從遠端Git Clone專案下來的時候,還是把舊專案加底線或清掉再重抓/換分支吧,不然都有舊專案跟新專案混淆的錯誤。

不過今天還算是有學習到的,自己打開專案追每個方法的來源、用Postman測試做Debug...等等,滿有趣的。