gpt4 book ai didi

git - 从中间删除 git merges

转载 作者:太空狗 更新时间:2023-10-29 13:46:32 24 4
gpt4 key购买 nike

我们使用 merge 工作流程维护分支结构。因此,我们的主分支提交层次结构如下所示。

Expected hierarchy

但是,由于我们使用不压缩和 rebase merge 的 Gitlab 社区版,有时开发人员会忘记执行一个或另一个 merge 提交,看起来像这样。

Bad merges

我从中恢复的通常方法是将 master 重置为这些 merge 之前的最后一次良好提交,然后重播每个 merge (在正确地重新设置和压缩之后)以 merge 它们。

更好的方法可能是使用 git rebase --onto命令在错误的 merge 被修复后重播好的 merge 。但是,我一直无法找出正确的方法来做到这一点。我所做的是:

  1. 将主分支重置为最后一次良好 merge 的提交。
  2. 在 rebase 分支之上 rebase 错误提交(不是压缩 rebase )。
  3. 在 rebase 分支上 merge rebase 后的压缩提交。
  4. 对任何其他错误提交重复该过程。
  5. 最后以与步骤 2-3 相同的方式重放所有良好的 merge 。

我尝试使用 git rebase -ip --onto <last_good_commit>重播我在第 5 步中的良好 merge ,但这似乎将 parent 的顺序交换为提交。谁有改进我的工作流程的好方法,这样我就不必手动重放每个 merge ?

最佳答案

git rebase -ip --onto <last_good_commit>似乎不完整。

应该是:

git rebase -imp --onto <last_good_commit> <first> <yourBranchToReplay>

如果你已经 checkout “yourBranchToReplay”,你可以省略最后一个参数。
但是你不能省略 <first> ,这是要重播的分支的第一个提交,您要将其放在 <last_good_commit> 之上

如 OP 所述, -m ( --merge )很重要。
我也是documented the -p --preserve-merge option of Git 1.8.5 back in 2013

关于git - 从中间删除 git merges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49590731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com