我有一个也是NuGet包的项目。因此,它存在于两个分支中:master
(用于发布新的正式版本)和development
(用于实际开发)。当我们要发布新版本时,我们只需将提交从development
合并到master
。
我们的程序包发布过程包括(并要求)标记提交。现在,问题是:过去,当我们从development
合并到master
时,master
的git历史记录将只包含来自development
的提交,没有合并提交(因此,它将始终向历史记录添加n
个提交)。
但是,从某个时候开始,团队中的某人开始对该存储库中的分支进行奇怪的操作,现在,每当我们合并到master
时,就会在顶部添加一个空的合并提交(因此会导致添加n+1
个提交到master
的历史记录)。它不包含任何更改的文件,仅存在于此。这有点令人讨厌,但是真正的问题是,现在package标签最终在合并提交时结束了,这是我们不想要的。
问题是:如何解决此问题,以使每次分支合并到master
分支时不再获得这些空的合并提交?
答案 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
中的最新提交。而是创建一个真正的合并提交来记录master
和development
之间的历史差异。
如果以上描述正确,则可以轻松地通过将master
合并到development
中一次来解决这种情况,最好是在将development
合并到master
中之后。
在合并之后(如果在发布合并之后立即发生,这应该是一个快进操作),master
将再次成为development
历史的一部分,因此将来合并{ {1}}进入development
将会再次将master
快进到master
的当前状态。