【问题标题】:Avoid adding empty merges避免添加空合并
【发布时间】:2019-05-29 23:23:06
【问题描述】:

我有一个项目,它也是一个 NuGet 包。因此,它存在于两个分支上:master,用于发布新的正式版本,development,用于实际开发。当我们想要发布新版本时,我们只需将提交从 development 合并到 master
我们的包发布过程包括(并要求)标记提交。现在,问题是:过去当我们从 development 合并到 master 时,master 的 git 历史记录将只包含来自 development 的提交,没有合并提交(所以它总是添加 @ 987654329@ 提交历史记录)。 然而,在某个时候,团队中的某个人开始对这个存储库中的分支做一些奇怪的事情,现在每当我们合并到 master 时,都会在顶部添加一个空的合并提交(因此它会导致 n+1 提交添加到 master历史)。它不包含任何更改的文件,它就在那里。这有点烦人,但这里真正的问题是,现在包标签最终出现在合并提交上,这是我们不想要的。
问题是:如何解决这个问题,以便我们不再每次分支合并到master 分支时都得到这些空的合并提交?

【问题讨论】:

  • 我不知道如何解决这个问题,但有些人喜欢总是进行合并提交,即使发生快进也是如此。这可能就是您拥有此配置的原因。

标签: git merge


【解决方案1】:

根据您的描述,master 的历史与development 的历史不同。这种差异可以小到为修改提交消息、作者或签名而重新设置的提交。 即使两个分支的树完全一样,历史仍然不同。因此,git 无法执行快进合并,它只更新master 以指向development 中的最新提交。相反,会创建一个真正的合并提交来记录 masterdevelopment 之间的历史差异。

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

在这次合并之后(如果它发生在发布合并之后,这应该是一个快进),master 将再次成为development 历史的一部分,所以将来development 合并到@ 987654335@ 将再次将master 快进到development 的当前状态。

【讨论】:

    【解决方案2】:

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

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

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

    请注意,如果您使用 GitLab、GitHub 或类似的东西,可能会有一些设置来调整是否强制执行合并提交。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-29
      • 2018-02-11
      • 2017-06-11
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      相关资源
      最近更新 更多