我们维护一个具有合并工作流程的分支结构。因此,我们的主分支提交层次结构如下所示。
然而,由于我们使用Gitlab社区版并没有压缩和rebase合并,有时开发人员忘记做一个或另一个并合并这样的提交。
我遵循从中恢复的常用方法是在这些合并之前将master重置为上次良好提交,然后重放每个合并(在重新定位和压缩之后)以合并它们。
更好的方法可能是使用ContextCompat.getColor()
命令在修复错误合并后重播良好的合并。但是,我一直无法弄清楚这样做的正确方法。我所做的是:
我尝试使用git rebase --onto
重播我在步骤5中的良好合并,但这似乎交换了父级的提交顺序。任何人都有一个很好的方法来改进我的工作流程,这样我就不必手动重放每一个合并?
答案 0 :(得分:0)
git rebase -ip --onto <last_good_commit>
似乎不完整。
应该是:
git rebase -imp --onto <last_good_commit> <first> <yourBranchToReplay>
如果您已签出“yourBranchToReplay”,则可以省略最后一个参数
但是你不能省略<first>
,这是你希望放在<last_good_commit>
如OP所述,-m
(--merge
)很重要
我也documented the -p
--preserve-merge option of Git 1.8.5 back in 2013
答案 1 :(得分:0)
@VonC的答案几乎是正确的。我必须将rebase命令修改为git rebase -ipm --onto <last_good_commit> <first> <yourBranchToReplay>
,并在固定合并上正确地重新定义所有剩余的合并。