如何克服解決Git衝突的恐懼症?(Git高階話題)

史培培發表於2018-03-20

如何克服解決Git衝突的恐懼症?(Git高階話題)

多分支rebase

多分支的情況下,我們往往希望得到有序的提交歷史,看下面的例子:

如何克服解決Git衝突的恐懼症?(Git高階話題)

執行如下步驟進行多分支rebase:

git rebase master bugFix
git rebase bugFix side
git rebase side another
git rebase another master
複製程式碼

如何克服解決Git衝突的恐懼症?(Git高階話題)

兩個父節點

操作符^~符一樣,後面也可以跟一個數字。

但是該操作符後面的數字與~後面的不同,並不是用來指定向上返回幾代,而是指定合併提交記錄的某個父提交。還記得前面提到過的一個合併提交有兩個父提交吧,所以遇到這樣的節點時該選擇哪條路徑就不是很清晰了。

Git預設選擇合併提交的“第一個”父提交,在操作符^後跟一個數字可以改變這一預設行為。

廢話不多說,舉個例子:

如何克服解決Git衝突的恐懼症?(Git高階話題)

//鏈式操作
git branch bugWork master~^2~
複製程式碼

如何克服解決Git衝突的恐懼症?(Git高階話題)

糾纏不清的分支

如何克服解決Git衝突的恐懼症?(Git高階話題)

如上圖,現在我們的master分支是比one、two和three要多幾個提交。出於某種原因,我們需要把master分支上最近的幾次提交做不同的調整後,分別新增到各個的分支上。

one需要重新排序並刪除C5,two僅需要重排排序,而three只需要提交一次。

執行如下命令:

git checkout one
git cherry-pick C4 C3 C2
git checkout two
git cherry-pick C5 C4 C3 C2
git branch -f three C2
複製程式碼

如何克服解決Git衝突的恐懼症?(Git高階話題)

相信大家對Git高階話題已經基本掌握,不妨在自己的git環境中動手試一試吧~

如何克服解決Git衝突的恐懼症?(Git高階話題)

微信公眾號:碼上論劍
請關注我的個人技術微信公眾號,訂閱更多內容

相關文章