讀書筆記: 版本控制使用Git - 合併
這章中譯讓人看的特別阿雜,很多翻譯得不清不楚,只能先記錄一些未來可能用到的指令。
圖示分支合併的結構(terminal)
$git log --graph --pretty=oneline --abbrev-commit
合併衝突
檢查合併檔案衝突
$git diff // 比較index與工作目錄
$git diff HEAD // 比較HEAD與工作目錄(被合併)版本
$git diff --ours // 相當於 git diff HEAD
$git diff MERGE_HEAD // 比較MERGE_HEAD與工作目錄(被合併)版本
$git diff --theirs // 相當於 git diff MERGE_HEAD
$git diff --base // 檢視從合併開始的改變
$git log --merge --left-right -p // 顯示所有合併衝突檔案的送交詳細紀錄
$git log --merge --left-right -p 檔名
--merge
只顯示跟合併衝突有關的commit、-p
顯示commit訊息和修正後檔案跟每個commit之間的關係
取消合併
可使用 git reset --hard
,但要注意該指令會造成index中的檔案不見,重置回HEAD的狀態。
$git reset --hard HEAD // 合併完成前放棄合併
$git reset --hard ORIG_HEAD // 合併完成後放棄合併
若要回復原始的狀態重新解決合併衝突,在Git 1.6.1版本以後,可使用的 git checkout -m
。
合併策略
可以用在 git merge
或 git pull
的子指令,用法如 git merge -s --resolve branch
:
- fast-forward
- resolve
- recursive
- octopus
- ours
- subtree