1.我們先從
master
分支切出一個
dev
分支,進行開發:
git:(master) git checkout -b feature1
2.這時候,你的同僚完成了一次
hotfix
,并合并入了
master
分支,此時
master
已經領先于你的
feature1
分支了:
3.恰巧,我們想要同步
master
分支的改動,首先想到了
merge
,執行:
git:(feature1) git merge master
圖中綠色的點就是我們合并之後的結果,執行:
git:(feature1) git log
就會在記錄裡發現一些
merge
的資訊,但是我們覺得這樣污染了
commit
記錄,想要保持一份幹淨的
commit
,怎麼辦呢?這時候,
git rebase
就派上用場了。
4.讓我們來試試
git rebase
,先回退到同僚
hotfix
後合并
master
的步驟:
5.使用
rebase
後來看看結果:
git:(feature1) git rebase master
這裡補充一點:
rebase
做了什麼操作呢?
首先,
git
會把
feature1
分支裡面的每個
commit
取消掉;
其次,把上面的操作臨時儲存成
patch
檔案,存在
.git/rebase
目錄下;
然後,把
feature1
分支更新到最新的
master
分支;
最後,把上面儲存的
patch
檔案應用到
feature1
分支上;
從
commit
記錄我們可以看出來,
feature1
分支是基于
hotfix
合并後的
master
,自然而然的成為了最領先的分支,而且沒有
merge
的
commit
記錄,是不是感覺很舒服了。
6.在
rebase
的過程中,也許會出現沖突
conflict
。在這種情況,
git
會停止
rebase
并會讓你去解決沖突。在解決完沖突後,用
git add
指令去更新這些内容。
注意,你無需執行 git-commit,隻要執行 continue
git rebase --continue
git rebase —abort