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