2011-09-01 131 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”中的顺序中合并所有功能。 –