簡介
Git中,rebase和merge操作都是將一個分支的更改合併到另一個分支中,但是方式不同。
舉個例子:現在有兩個分支master和feature,分別有如下提交:
git merge feature
merge操作將會自動產生一個新的commit,記錄這次合併的提交資訊,merge操作記錄了真實的commit情況,包括每個分支的詳情。
git rebase feature
rebase將從主分支的最後一次提交開始新增feature分支中的所有更改。
注意事項
- 如果您想檢視與發生時完全相同的歷史記錄,您應該使用merge。merge會儲存歷史記錄,而rebase重寫歷史記錄。
- 如果feature分支的更改與其他開發人員共享,則不建議使用rebase,因為rebase過程將建立不一致的倉庫。
- rebase更好地簡化了複雜的提交記錄,也可以通過互動式rebase更改提交歷史:可以刪除不需要的commit、將兩個或多個commit壓縮到一個commit、編輯commit訊息等。
- merge一次性展示所有衝突,而Rebase每次展示一次commit時的衝突。rebase可以更好的處理衝突,但是帶來的問題是,如果想要還原(revert)一次rebase操作就會變得十分困難。
The Golden Rule of Rebasing rebase
never use it on public branches(不要在公共分支上使用)
總結
如果你想要一個乾淨的,沒有merge commit的線性歷史樹,那麼你應該選擇git rebase 如果你想保留完整的歷史記錄,並且想要避免重寫commit history的風險,你應該選擇使用git merge