Mercurial:避免跳过祖先修订的方法

Mercurial : Way to avoid skipping ancestor revision

我遇到了与what does 'skipping ancestor revision' mean when using 'graft'?

类似的问题

但是这个SO主题不给出解决方案,只给出解释。

更详细:昨天同事犯了一个错误并推送了它。其他同事和我在此之后添加了提交。为了快速修复这个错误,我使用 hg backout 取消了这个提交号 11511。 但是我不想放弃这个提交,所以我创建了一个新分支(从回退提交)并且我试图嫁接 11511 提交但是 Mercurial 说:

跳过祖先版本

我想获取包含 11511 提交更改的分支来修复错误。解决方案是什么?

好的,我对你的问题有点误解。

下一行下面的部分是如何在需要时重新应用错误的变更集。

这里的重要部分是您没有丢失任何东西。退出变更集不会从历史记录中删除原始变更集,而是创建另一个与您退出的变更集相反的变更集,实际上删除了原始变更集引入的变更。

因此,在您决定恢复那些糟糕的更改之前,您无需执行任何操作。那时,当您想要恢复错误的更改时,您可以按照我在下面提到的进行操作。你要做的是更新紧接在原始坏变更集之前的变更集,然后将坏变更集移植到它上面,这将创建一个与你退出的原始坏变更集平行的新头。

这个新头部以后可以合并回头部。

解决此问题的另一种方法是简单地撤销撤销变更集。

Mercurial 感到困惑,因为您正试图嫁接一个已经存在于历史记录中的提交(并且没有意识到撤消将其还原)。

有几个可能的解决方案。一,使用 -f 选项强制 hg graft 继续:

hg graft -f -r 11511

或者,您可以在您创建的分支上再次撤销已撤销的提交。