如何撤消“hg qnew”?

时间:2013-04-17 12:55:49

标签: mercurial undo mercurial-queue backout

我发布了hg qnew,却没有意识到它包含了对补丁的任何未完成的更改。我想支持这一点,只使用hg qrecord选择具体的更改。如何撤消qnew

3 个答案:

答案 0 :(得分:12)

您的答案肯定有效 - 使用较新的Mercurial,您可以使用hg strip --keep来避免执行导入步骤:

$ hg strip --keep .
$ hg qdelete patch-name

--keep标志使得strip在工作时忽略工作副本,也就是说,它会删除提交(如hg qpop会这样做),但它不会撤消对文件的更改。剥离后,你仍然有你的系列中的补丁(未应用),然后你可以删除它。

答案 1 :(得分:2)

我找到了答案here

hg qpop
hg import --no-commit .hg/patches/patch-name
hg qdelete patch-name

如果你知道的话,请添加更好的方法。

更新:根据Aldo的回答,还有另一种方式:

hg qnew test
# We can undo the above qnew as:
hg qrefresh -X '*'
hg qpop -f
hg qdelete test

答案 2 :(得分:2)

如果您只想撤消保留所有本地更改的最新qnew,则可以选择以下选项:

qcrefresh 123
hg qpop -f
hg qdelete <name of the patch>

请注意,123只是一个随机字符串:您告诉mercurial只包含当前补丁中的(希望不存在的)123文件。 更新版本的Mercurial当您发布时会发出关于123文件不存在的警告,但这正是我们想要的。

如果您想保留当前路径中的某些更改,可以使用crecord extension中的qcrefresh命令,该命令允许以图形方式选择要包含的更改在当前的补丁中。您需要从Bitbucket download获取存档并在.hgrc中对其进行配置:

[extensions]
crecord = <path/to/crecord/package>