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

Lst*_*tor 18 mercurial mercurial-queue

此答案显示了如何降级提交到修补程序,但是如何才能将mq修补程序转换为本地更改?

Lst*_*tor 24

简短的回答

确保应用补丁,然后:

hg qrefresh nothing
hg qpop --keep-changes
hg qdelete "Name of patch"
Run Code Online (Sandbox Code Playgroud)

答案很长

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

hg qrefresh nothing
Run Code Online (Sandbox Code Playgroud)

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

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

hg qpop --keep-changes
Run Code Online (Sandbox Code Playgroud)

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

hg qrm "Name of patch"
Run Code Online (Sandbox Code Playgroud)

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

(注意:hg qrm并且hg qremove是别名hg qdelete.)

如果使用TortoiseHg

使用TortoiseHg,将补丁导出到剪贴板(Workbench>右键单击补丁>导出>复制补丁),然后取消应用补丁,最后从目标为"工作目录"的剪贴板导入似乎有效.以下是一些演示此过程的屏幕截图: 在此输入图像描述

  • `--keep-changes`不再是`hg qpop`的有效选项.根据`hg help qpop`,似乎`--force`现在可以实现我们想要的功能:" - f --force忘记修补文件的任何本地更改" (3认同)

dup*_*ode 7

一个可以说更简单的替代方案:

hg qfinish qtip
hg strip -k tip
Run Code Online (Sandbox Code Playgroud)

也就是说,完成补丁,然后删除生成的提交,同时保留其更改(-k选项strip).