合并后Git分支并提交历史记录

Ans*_*nsd 20 git merge branch

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

当我合并一个分支时,我看到(使用gitxgitk)master分支的历史记录获得了我对合并分支所做的所有提交.我的意思是,如果我有类似的东西:

master a-b-c-d
              \z-x-y--
              |branch name
Run Code Online (Sandbox Code Playgroud)

合并后我得到:

a-b-c-d-z-x-y
            |branch name
Run Code Online (Sandbox Code Playgroud)

是的,我看到合并的分支名称突出显示(使用gitxgitk),但我期待的是显示提交完成的位置(到哪个分支),如:

master a-b-c-d--------M--
              \-z-x-y-/
              |branch name
Run Code Online (Sandbox Code Playgroud)

所以我期待看到提交"M"代表我已经完成的合并,而不是看起来我已经完成了对新分支所做的所有提交.

我的期望是否正确?或者这是正常git行为?

Cam*_*ner 30

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

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

  • 在特征分支中合并时使用`--no-ff`有一些好处.主要的一点是它是一次性恢复以支持该功能. (6认同)
  • @Ans:我不推荐它只是因为我从来没有找到它的用途.我更喜欢保持`master`历史尽可能简单和线性,并且一旦它被合并,我就不需要关心一个特征分支.@Dan Ray关于一次性恢复的观点是有效的,但是,所以这可能是使用`no-ff`的一个很好的理由.您可能无法轻松地重新生成分支历史记录,但如果您仍然拥有所有旧分支,那么您可以手动生成一个分支,该分支以您将它们合并为"master"的相同顺序合并所有功能. (2认同)

Von*_*onC 6

你可以在" 理解Git工作流 "中找到对-no-ff选项的额外批评,主要是因为它会破坏git blame.
更多的" 快进当使用pullno-ffpull ".

正如" 为什么git默认使用快进合并? "中所解释的那样,除非你谈论的是一个非常长寿的分支,否则快进合并更可取.