合并后的Git分支和提交历史

22
我正在单独完成一个项目,针对每个功能模块,我都会创建一个新的分支来开发,并在开发完成后将其合并到主分支。因此,通常我不会同时使用两个不同的分支,也不会在开发分支时操作主分支。
当我合并一个分支时,使用 gitxgitk,我会发现主分支的历史记录中包含了所有我在已合并分支上提交的提交记录。我的意思是如果我有以下情况:
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个回答

31

这是Git的正常行为。因为你的分支严格领先于master分支,所以你正在进行所谓的“快进”合并。

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


6
在合并特性分支时,使用 --no-ff 有一些好处,其中主要的好处是可以一次性回退该特性。 - Dan Ray
非常感谢这些有用的信息。@Cameron你能否解释一下为什么不推荐这么做?我能否“保留”所有旧的合并记录?(这主要是因为我需要撰写关于我的项目报告,所以分支的截图会很有帮助) - Ansd
2
@Ans:我不建议使用它,因为我从未发现过它的用途。我更喜欢将“主”历史保持简单和线性,并且一旦功能分支被合并,我从未需要关心它。但是,@Dan Ray提到的一次性还原是有效的,这可能是使用no-ff的好理由。您可能无法轻松地重新生成分支历史记录,尽管如果您仍然拥有所有旧分支,则可以手动生成一个分支,以相同的顺序将所有功能合并到master中。 - Cameron Skinner

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接