【问题标题】:How do you move a Gerrit Change to a different branch?如何将 Gerrit 变更移动到不同的分支?
【发布时间】:2020-01-18 01:19:34
【问题描述】:

在我们的 Gerrit 设置中,我们没有启用 Move Change 插件,但我们对分支 A 进行了很多更改,我们希望以最小的分布将其移至分支 B。

到目前为止,我发现这样做的唯一方法是在本地 repo 上检查分支 A 上的更改,然后:

git push origin HEAD:refs/for/B

这会在分支 B 上创建一个新更改,从我尝试在分支 A 上移动的更改中“挑选樱桃”。这意味着我们需要放弃分支 A 上的旧更改,从而造成更多混乱比我想的要多(我们基本上会复制我们想要移动的每一个更改)。

有没有办法通过 git CLI 移动更改?我希望以与上传新变更集而不是创建新变更类似的方式更新分支。

【问题讨论】:

  • 如果要将 A 上的所有提交移动到 B,请使用 git checkout B && git merge A --no-ff && git push origin HEAD:refs/for/B。如果您想要一些提交,请改用git cherry-pick。在后一种情况下,检查 A 上的提交然后推送到 refs/for/B 是不合适的,因为它会将 A 和 B 混合在一起,就像将 A 合并到 B。
  • @ElpieKay :恐怕这并不能真正回答问题。您所描述的内容会在 Gerrit 中的分支 B 上创建合并提交。分支 A 上的更改仍然存在于 Gerrit 中,需要先在分支 A 上提交,然后才能提交合并提交。我想要的解决方案(尽管我开始认为可能不存在)是将 Gerrit 中的更改移动到另一个分支,而无需进行其他更改。
  • 除非 A 的未提交更改之一恰好是 B 的完美新提示,否则如果没有新更改就不可能做到这一点,在这种情况下,您可以将 B 重置为此提交并强制推送 B,或强制推送此提交以更新 B,而不进行任何新更改。
  • 感谢您的帮助@ElpieKay。我认为这是不可能的,但谢谢你的确认。

标签: git branch git-branch gerrit


【解决方案1】:

Move Change 不是插件,而是核心功能,从 2.13 版本开始可用。从 3.0.0 版开始,可以使用 disable it on the server config。 (请注意,配置自 3.0.0 起可用,但仅记录自 3.0.3 起)。

如果 Gerrit 的版本早于 2.13,或者 3.0.0 或更高版本且禁用了该功能,则无法移动更改的目标分支。您将不得不放弃它并将新的重新上传到正确的分支。

对于 3.0.0+,您可以要求服务器管理员启用该功能,但如果它被禁用,则意味着它被故意禁用;它默认启用。人们可能想要禁用它的一个原因是它不会自动在新目标上重新设置移动的更改,这可能会导致包含不需要的提交。见issue 12216

【讨论】:

  • 非常感谢大卫的回复。我相信我们已经禁用了这个插件,所以我决定最好的方法是说服服务器管理员启用它。
猜你喜欢
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
相关资源
最近更新 更多