Git中merge和rebase的區別

悠遊0902發表於2019-05-02

簡介

Git中,rebase和merge操作都是將一個分支的更改合併到另一個分支中,但是方式不同。

舉個例子:現在有兩個分支master和feature,分別有如下提交:

git merge feature

merge操作將會自動產生一個新的commit,記錄這次合併的提交資訊,merge操作記錄了真實的commit情況,包括每個分支的詳情。

git rebase feature

rebase將從主分支的最後一次提交開始新增feature分支中的所有更改。

Git中merge和rebase的區別

注意事項

  • 如果您想檢視與發生時完全相同的歷史記錄,您應該使用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

相關文章