合併分支有兩種方式,merge和rebase。merge是根據三方合併的差異,創建一個新的提交。rebase是將上游分支的各個提交在比較差異後在下游分支上重演一遍。

rebase適合對沒有推送到遠程的提交對象做合併,這樣可以保持一個整潔的提交歷史。若對已推送的提交對象使用rebase,可能導致其它已經拉取並創建了新的提交的人不得不重新合併,進而導致提交歷史變得很混亂。

基本的rebase:

1
2
3
git rebase master unstable
git checkout master
git merge unstable

複雜的情況:存在三個分支,unstable基於master的某個提交創建,feature基於unstable的某個提交創建,要把feature合併到master而不合併unstable。更多分支時方法也一樣。

1
2
3
git rebase --onto master unstable feature
git checkout master
git merge feature

rebase過程中如果存在衝突,合併後用git add標記已解決,再用git rebase --continue繼續。如果解決衝突後仍然不能繼續,可能是當前補丁的內容在下游分支已存在,可以用git rebase --skip跳過。