2013-09-27 67 views
2

許多git工作流程主張做一個git merge --no-ff將一個功能分支引入主線。我個人更喜歡將git rebase -i我的功能分支合併爲一個乾淨的提交,然後做一個簡單的git合併。git功能分支:rebase -i或合併--no-ff?

是否有任何缺點使用rebase -i這種方式,而不是合併--no-ff功能分支?

+3

'git merge --squash'與你使用'git rebase -i'的方式大致相同,並且需要較少的用戶交互,這意味着更少的機會來搞砸:) – hvd

回答

1

使用merge --no-ff,創建一個新的提交有每個HEAD合併分支機構的父母(最後一次提交的),你的情況:最後提交的「主線」和最後提交「功能」分支。這會讓git記住「特性」分支歷史是合併提交歷史記錄的一部分。

歷史與 merge

,合併後提交*有兩個分支負責人作爲父母:

mainline ---------* 
       /
feature -------/ 

隨着rebase -i,新的承諾將不包括「功能」分支的HEAD中的列表重新提交的提交的父母,因此存儲庫將失去跟蹤提交的以前的歷史記錄。

歷史與rebase,重訂基期提交*只有一個「主線」 HEAD父:

mainline --------* 

feature -------- 

記住,承諾是沒有引用得到垃圾收集。如果你使用「rebase -i」,它不會創建一個引用(因爲它不包括在rebase commit中作爲父節點),並且如果「feature」分支有刪除,那麼這個歷史將最終被修剪被垃圾收集器刪除),如果你的倉庫沒有其他引用。

+0

所以我想正確妥協將rebase - 雜亂的功能分支到幾個邏輯原子提交,然後合併--no-ff那? – calid

+1

這只是一個觀點:我只想在*推*之前重新整理,並且在公開發布之前,在歷史中留下最重要的一系列變化(壓縮「duh,修正縮進或空格」之類的提交),但剩下的大部分都是)。將功能分支重新映射到主分支中並不是一個壞主意(特別是如果您從未共享分支),則不要壓縮所有提交(只留下一個提交)。 – KurzedMetal

+0

'git merge --squash'有同樣的缺點嗎? – TomFuertes