【发布时间】: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