从中间删除git合并
我们使用合并工作流维护分支结构。因此,我们的主分支提交层次结构如下所示 然而,由于我们使用的是Gitlab community edition,它不会挤压合并并重新设置合并的基础,因此有时开发人员会忘记执行其中一项操作,并合并类似于下面所示的提交 我从中恢复的通常方法是将master重置为这些合并之前的最后一个良好提交,然后重播每次合并(在正确重定和挤压之后)以合并它们 更好的方法可能是使用从中间删除git合并,git,git-merge,git-rebase,Git,Git Merge,Git Rebase,我们使用合并工作流维护分支结构。因此,我们的主分支提交层次结构如下所示 然而,由于我们使用的是Gitlab community edition,它不会挤压合并并重新设置合并的基础,因此有时开发人员会忘记执行其中一项操作,并合并类似于下面所示的提交 我从中恢复的通常方法是将master重置为这些合并之前的最后一个良好提交,然后重播每次合并(在正确重定和挤压之后)以合并它们 更好的方法可能是使用git-rebase--on命令在修复错误合并后重播正确合并。然而,我一直无法找到正确的方法来做到这一
git-rebase--on
命令在修复错误合并后重播正确合并。然而,我一直无法找到正确的方法来做到这一点。我所做的是:
git-rebase-ip--on
来重播我的好合并,但这似乎可以用父级的顺序来交换提交。有没有人有办法改进我的工作流程,这样我就不必手动重放每一次合并?git-rebase-ip--on
似乎不完整
应该是:
git rebase -imp --onto <last_good_commit> <first> <yourBranchToReplay>
git-rebase-imp-on
如果您已签出“yourBranchToReplay”,则可以忽略最后一个参数。但是您不能忽略
,这是要放在
之上的要重播的分支的第一次提交
正如OP所指出的,这一点很重要。我还@VonC的回答几乎是正确的。我不得不将rebase命令修改为
git rebase-ipm--on
,它在固定合并上正确地重新设置了所有剩余合并的基础。我可能会做一些类似于您已经建议的事情;以您的第二张图像为例,我将重置为合并绿色分支的位置,然后签出第一个红色分支并重新设置该分支的基础,然后再次合并它,依此类推以下分支。我之所以选择“慢”的方式是因为存在冲突的风险(语义或句法)——我想检查每一步的结果。你有没有考虑过干脆不做这些事情?Git能够很好地处理这种情况,只要您至少尝试遵守纪律,这样它就不会失控,您真的需要修复任何东西吗?我问的原因是,如果你对重基方案很严格,为什么你会有合并,而不仅仅是一个线性历史?如果没有-m标志,它将不会保留合并,并将扁平化提交,这不是我想要的。