【问题标题】:How to abort an Hg merge without losing working copy changes?如何在不丢失工作副本更改的情况下中止 Hg 合并?
【发布时间】:2016-09-17 23:29:32
【问题描述】:

昨晚我开始了合并;忘记提交了。

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

今天我不再想要那个合并(因为我将在更新的版本上合并),但我想保留本地工作更改。这些更改独立于任何合并解决方案。

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


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

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

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


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

【问题讨论】:

  • 能否将您想要保留的更改导出为补丁?我想这可能会有点费力。
  • @Nanhydrin 我热衷于在这种情况下“最大限度地减少”恢复乏味的同时可以完成的任何过程。我发现了一些魔术来欺骗 Hg 以为它不在合并中,但似乎应该将其保留为魔术:}

标签: merge mercurial shelveset


【解决方案1】:

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

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.

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

如果您使用的是进化扩展,hg prune -r tip 优先于 hg strip -r tip --keep,因为它仍然保留(隐藏)临时提交,以防您以后需要参考它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多