Git branches&合并后提交历史记录

时间:2011-09-01 18:43:52

标签: git merge branch

我正在开发一个项目(单独),对于我开发的每个功能,我创建了一个新的分支,处理这个功能,然后将它合并到master。所以通常我一次不会在两个不同的分支上工作,而在分支机构工作时从不接触主人。

当我合并分支时,我看到(使用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行为?

2 个答案:

答案 0 :(得分:30)

这是正常的Git行为。您正在进行所谓的“快进”合并,因为您的分支严格地位于master分支之前。

如果你真的想要保留分支历史记录(虽然我建议你不要打扰),那么你可以使用git merge --no-ff强制它创建合并提交,即使它可以进行快进更新

答案 1 :(得分:6)

您可以在“Understanding the Git Workflow”中找到对-no-ff选项的额外批评,主要是因为它会中断git blame。 更多“fast forward when using pull and no-ff when pull”。

正如“Why does git use fast-forward merging by default?”中所解释的那样,除非你在谈论一个非常长寿的分支,否则最好是fast-forward merge