當(dāng)本地commit一個(gè)提交和遠(yuǎn)端服務(wù)器中的代碼有沖突(別人也改了相同的文件)時(shí)可以在pull 中加 –rebase。加上 rebase 的意思是:
git pull --rebase
合并前:
D---E master /A---B---C---F origin/master
使用 merge 合并后:
D--------E / A---B---C---F----G master, origin/master
如果是 rebase 的方式,就不會(huì)有 G 合并點(diǎn):
A---B---C---F---D'---E' master, origin/master
注意到,其中 D’, E’ 的 commit SHA 序號跟本來 D, E 是不同的,應(yīng)為算是砍掉重新 commit 了。
rebase 跟 merge 類似,出現(xiàn) conflict 會(huì)暫停 rebase 動(dòng)作,需要你手動(dòng)修復(fù)后,然后才可以繼續(xù)動(dòng)作。這也是 rebase 比 merge 復(fù)雜一點(diǎn)的地方:merge 如果發(fā)生 conflict,你只需要解決沖突一次,然后commit 出去就完成了。而 rebase 的 conflict 可能會(huì)發(fā)生在上述步驟 4 的每一次重新套用上,所以可能需要解決沖突好幾次 (rebase 時(shí)所謂的解決沖突,其實(shí)是直接修改你之前的變更內(nèi)容,所以上圖中變成 D’ 跟 E’ )。
如果想要把 rebase 當(dāng)做 git pull 的默認(rèn)值,可以在 .git/config 加上
[branch "master"] remote = origin merge = refs/heads/master rebase = true
也可以直接加到 ~/.gitconfig 讓所有的 tracked branches 都自動(dòng)套用這個(gè)設(shè)定:
[branch] autosetuprebase = always