Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Mercurial队列修补程序仅转换为本地更改?_Mercurial_Mercurial Queue - Fatal编程技术网

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

如何将Mercurial队列修补程序仅转换为本地更改?,mercurial,mercurial-queue,Mercurial,Mercurial Queue,显示如何将提交降级到修补程序,但如何仅将mq修补程序转换为本地更改?简短回答 确保已应用修补程序,然后: hg qrefresh nothing hg qpop --keep-changes hg qdelete "Name of patch" 长答案 首先,您需要确保修补程序不会跟踪任何更改。要做到这一点,请使用 hg qrefresh nothing nothing只是存储库中不存在的随机文件名。为了简洁起见,我通常使用hgqref0hg qrefresh接受可选的文件模式。如果给定,补

显示如何将提交降级到修补程序,但如何仅将mq修补程序转换为本地更改?

简短回答

确保已应用修补程序,然后:

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

首先,您需要确保修补程序不会跟踪任何更改。要做到这一点,请使用

hg qrefresh nothing
nothing
只是存储库中不存在的随机文件名。为了简洁起见,我通常使用
hgqref0
hg qrefresh
接受可选的文件模式。如果给定,补丁将跟踪与模式匹配的更改,并且只跟踪那些更改。当没有任何内容与文件模式匹配时,修补程序将不会跟踪任何更改,因此只有本地更改

现在你有一个无用的补丁,你有一些地方的变化。要清理,你可以这样做

hg qpop --keep-changes
即使有本地更改,也要弹出修补程序。最后,要删除死的、空的和未应用的补丁,您可以使用

hg qrm "Name of patch"
您无法删除应用的补丁,这就是为什么需要
hg qpop--keep changes
步骤的原因

(注意:
hg qrm
hg qremove
hg qdelete
的别名)

如果使用龟甲

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

一个更简单的选择:

hg qfinish qtip
hg strip -k tip

也就是说,完成修补程序,然后删除结果提交,同时保留其更改(将
-k
选项设置为
strip
)。

对不起,mq修补程序已经是“仅本地更改”,AFAIK。为什么您想要更多?“本地更改”是Mercurial术语,用于表示不在变更集中或未被Mercurial补丁跟踪的更改。想要将修补程序转换回本地更改可能有几个原因。无论如何,我已经做了好几次了,但在堆栈溢出和谷歌搜索中都没有找到答案(我必须使用RTFM),所以当我找到答案时,我就分享了答案,以防其他人也这么做。
--保留更改
不再是
hg qpop
的有效选项。根据
hg-help-qpop
,似乎
--force
现在是实现我们想要的选项:“-f--force忘记对补丁文件的任何本地更改”
hg-qrefresh 0
失败,系统无法找到指定的文件。我找到的备选方案(powershell语法):
hg-qrefresh--exclude“$(hg root)”
。这告诉MQ排除存储库中的所有内容。不管出于什么原因,只是
不起作用,我必须指定完整的路径(因此,
hg root
)。@craftyNumber我仍然看到
——保留更改
,AFAICT
--force
将丢失我们试图保存的更改。我会使用@duplode的选项,因为它更简单,并且不使用
--keep changes
--force
。话虽如此,在我看到我刚刚用Mercurial 2.0.2版成功运行了
hg qpop-f
之前,我仍然有我的本地更改,但我首先确认了所有文件的名称都不完全相同,并运行了
rsync-av$(hg st-qn)/tmp/
,因此我有一个备份。如果您不确定,一定要备份您的文件!