如何在Mercurial中回滚单个更改?

时间:2010-02-17 22:27:52

标签: mercurial

我对我想要回滚的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中提取反向差异并将其作为补丁应用到我的工作副本,然后提交。我知道。但我想找到该工具直接支持的一些方法。

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将提交一个新的补丁来反转之前的更改,从而保持历史记录的变化。这是一个更安全的选择,但如果你经常犯本地错误(比如我),那就不那么好了。