2011-09-01 163 views
20

我正在開發一個項目(單獨),併爲我開發的每個功能創建一個新分支,處理此功能,然後將其合併到主控中。所以通常我不會一次在兩個不同的分支上工作,並且在分支上工作時從不碰到主人。合併後的Git分支和提交歷史

當我合併一個分支時,我發現(使用gitxgitk)master分支的歷史記錄獲取了我對合並分支所做的所有提交。我的意思是,如果我有這樣的:

master a-b-c-d 
       \z-x-y-- 
       |branch name 

合併後,我得到:

a-b-c-d-z-x-y 
      |branch name 

是的,我看到了合併分支名高亮(使用gitxgitk),但我所期待的是什麼確切表示將提交完成(到哪個分支),如:

master a-b-c-d--------M-- 
       \-z-x-y-/ 
       |branch name 

所以我期待看到代表我對我所做的主人合併的提交「M」,沒有看起來我已經完成了對新分支所做的所有提交。

我的期望是否正確?或者這是正常的git行爲?

回答

29

這是正常的Git行爲。您正在做所謂的「快進」合併,因爲您的分支嚴格超過master分支。

如果你真的想保留分支歷史(儘管我建議你不要打擾),那麼你可以使用git merge --no-ff強制它創建一個合併提交,即使它可以做一個快進更新。

+5

合併功能分支時使用'--no-ff'有一些好處。主要的一點是它是一次性恢復退出功能。 –

+0

非常感謝您提供有用的信息。 @Cameron能否請你解釋爲什麼不推薦這麼做?我可以「代表」我所有的舊合併? (這基本上是因爲我需要寫一個關於我的項目的報告,所以我的分支的截圖會有所幫助) – Ansd

+2

@Ans:我不推薦它,因爲我從來沒有找到它的用處。我更願意保持'master'歷史儘可能簡單和線性,並且我從來不需要關心一個特徵分支被合併後。@丹Ray關於一次性恢復的觀點是有效的,但是,這可能是使用'no-ff'的一個很好的理由。您可能無法輕鬆地重新生成分支歷史記錄,但如果您仍然擁有所有舊分支,那麼您可以手動生成一個分支,將它們合併到「master」中的順序中合併所有功能。 –