避免添加空合并

时间:2019-01-03 11:09:16

标签: git merge

我有一个也是NuGet包的项目。因此,它存在于两个分支中:master(用于发布新的正式版本)和development(用于实际开发)。当我们要发布新版本时,我们只需将提交从development合并到master
我们的程序包发布过程包括(并要求)标记提交。现在,问题是:过去,当我们从development合并到master时,master的git历史记录将只包含来自development的提交,没有合并提交(因此,它将始终向历史记录添加n个提交)。 但是,从某个时候开始,团队中的某人开始对该存储库中的分支进行奇怪的操作,现在,每当我们合并到master时,就会在顶部添加一个空的合并提交(因此会导致添加n+1个提交到master的历史记录)。它不包含任何更改的文件,仅存在于此。这有点令人讨厌,但是真正的问题是,现在package标签最终在合并提交时结束了,这是我们不想要的。
问题是:如何解决此问题,以使每次分支合并到master分支时不再获得这些空的合并提交?

2 个答案:

答案 0 :(得分:1)

您要执行的是快速向前合并。仅当development分支上的所有更改都在master上的最新提交之上进行时,才能进行快速向前合并。在这种情况下,如果您用git merge调用--ff-only,则master分支指针将直接设置为development的最新提交。

有关ff和非ff合并的详细信息,请参见this question和链接的问题。

与之相反的是--no-ff参数,即使没有必要,它也会强制执行合并提交。

请注意,如果您使用GitLab,GitHub或类似工具,则可能会有一些设置来确定是否强制执行合并提交。

答案 1 :(得分:1)

根据您的描述,master的历史与development的历史有所不同。这种差异可能与为修改提交消息,作者或注销而重新建立基础的提交一样小。 即使两个分支的树完全相同,历史仍然不同。因此,git无法执行快进合并,该合并仅更新master以指向development中的最新提交。而是创建一个真正的合并提交来记录masterdevelopment之间的历史差异。

如果以上描述正确,则可以轻松地通过将master合并到development中一次来解决这种情况,最好是在将development合并到master中之后。

在合并之后(如果在发布合并之后立即发生,这应该是一个快进操作),master将再次成为development历史的一部分,因此将来合并{ {1}}进入development将会再次将master快进到master的当前状态。