如何仅将Mercurial队列修补程序转换为本地更改?

时间:2012-11-20 14:13:15

标签: mercurial mercurial-queue

This answer显示了如何降级对补丁的提交,但是如何才能将mq补丁转换为本地更改?

2 个答案:

答案 0 :(得分:24)

简短回答

确保应用补丁,然后:

hg qrefresh nothing
hg qpop --keep-changes
hg qdelete "Name of patch"

答案很长

首先,您需要确保修补程序不会跟踪任何更改。为此,请使用

hg qrefresh nothing

nothing只是存储库中的随机文件名。我通常使用hg qref 0来简化。 hg qrefresh接受可选的文件模式。如果给出,补丁将跟踪与模式匹配的更改 - 并且仅跟踪那些。当没有任何内容与文件模式匹配时,补丁将不会跟踪任何更改,因此仅会进行本地更改。

现在你有一个无用的补丁,你有一些局部的变化。要清理,你可以

hg qpop --keep-changes

即使有本地更改,也要弹出补丁。最后,要删除死,空和未应用的补丁,您可以使用

hg qrm "Name of patch"

您无法删除已应用的修补程序,这就是您需要hg qpop --keep-changes步骤的原因。

(注意:hg qrmhg qremovehg qdelete的别名。)

如果使用TortoiseHg

使用TortoiseHg,将补丁导出到剪贴板(Workbench>右键单击补丁>导出>复制补丁),然后取消应用补丁,最后从目标为“工作目录”的剪贴板导入上班。以下是一些演示此过程的屏幕截图: enter image description here

答案 1 :(得分:7)

一个可以说是更简单的选择:

hg qfinish qtip
hg strip -k tip

即,完成修补程序,然后删除生成的提交,同时保留其更改(-k选项strip)。