如何在不丢失工作副本更改的情况下中止Hg合并?

时间:2016-05-20 16:04:52

标签: merge mercurial shelveset

昨晚我开始合并;并忘了承诺。

后来我对工作副本进行了一些更改。

今天我根本不再需要合并(因为我将在更新版本上合并),但我想保留本地工作更改。这些更改与任何合并解决方案无关。

如何在中止当前合并时保留(和/或稍后重新应用)本地更改?

不允许在本地更改上使用shelve

$ hg shelve foo/bar
abort: cannot shelve while merging

使用hg up -C,“中止合并”的正常方法将消除本地更改。

这与How to 'hg merge' without affecting the working directory?不同,因为合并已经开始,只是没有提交。如果问题可以简单地显示,那么涉及首先完成提交然后选择更改的答案是合适的,尽管问题 关注的是“在没有提交的情况下中止”。

1 个答案:

答案 0 :(得分:3)

最简单的解决方案可能是在秘密提交中临时记录更改,然后恢复到该提交,例如:

hg resolve -m -a                       # mark all files as resolved
hg commit -s -m "Savepoint."           # Temporary commit.
hg update .^                           # Back to original revision.
                                       # (Use ".^" in cmd.exe on Windows.)
hg revert -r tip --all                 # Revert files to saved commit.
hg diff                                # Verify that you've got all the changes.
hg strip -r tip --keep                 # And discard the temporary commit.

我们在这里使用秘密提交,以便在您忘记剥离它时不会意外地被推送(或者如果您打算在之后保留它)。

如果您正在使用evolve扩展,则hg prune -r tip优先于hg strip -r tip --keep,因为它仍会保留临时提交(隐藏)以防您以后需要引用它。 / p>