讀書筆記: 版本控制使用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 mergegit pull 的子指令,用法如 git merge -s --resolve branch

  1. fast-forward
  2. resolve
  3. recursive
  4. octopus
  5. ours
  6. subtree