我对我想要回滚的mercurial项目中的文件进行了更改,但是我希望在其后发生一些更改:
Revision 1: Original
Revision 2: A change I made in error
Revision 3: A change I want to keep
我想仅回滚修订版2中的更改,留下1和3,并创建新版本4.最“Mercurial”的做法是什么?
请注意,是的,我可以从修订版2中提取反向差异并将其作为补丁应用到我的工作副本,然后提交。我知道。但我想找到该工具直接支持的一些方法。
答案 0 :(得分:5)
我认为如果您查看项目的更改日志(以便可以看到所有修订版本),您可以选择一个修订版本并使用backout命令撤消它。
(我手边没有任何东西可以检查,所以可能不正确。)
答案 1 :(得分:1)
您也可以使用mq补丁编辑近期历史记录。以下命令序列可以解决这个问题:
hg qinit # initialises a queue hg qimport -r2:TIP # moves revisions from 2 onwards into patch management hg qpop -a # unapplies patches, leaving your actual checkout at r1 hg qrm 2.diff # deletes the r2 patch (forever) hg qpush -a # applies all remaining patches again (i.e. the r3 patch) hg qfinish -a # moves applied patches back into official repository history
这类事情非常适合修复本地存储库中的错误,但由于您正在更改历史记录,请确保您没有推送给其他人(或者他们没有在你修复之前从原来的版本拉出来。
如果我理解正确,hg backout
将提交一个新的补丁来反转之前的更改,从而保持历史记录的变化。这是一个更安全的选择,但如果你经常犯本地错误(比如我),那就不那么好了。