说我有文件File_A
,File_B
和File_C
。我故意编辑File_A
和File_B
,但File_C
我刚刚添加了一些我不打算提交的调试代码。然后偶然我做了
hg commit -m "comment"
如何恢复/回滚/退出File_C
?基本上我很高兴能够去
hg update -r <oneRevBack> File_C
hg commit -m "put C back"
但更新不会使用过滤器AFAIK,因此它也会恢复File_A
和File_B
。我可以复制File_C
某处,hg update
,然后将其复制回来,但这似乎很蹩脚。有没有办法在Mercurial中直接执行此操作?
答案 0 :(得分:30)
如果您使用hg revert
代替hg update
hg revert -r .^ File_C
hg commit -m "put C back"
答案 1 :(得分:7)
在大多数情况下,VonC的解决方案非常完美。但是,如果回滚不是选项(例如因为有问题的提交不是最后一个,或者因为你进行了复杂的部分提交),那么你可以使用不需要的更改的反向差异进行新的提交File_C
:
hg diff -c REVISION --reverse File_C | hg import -m "Revert changes to File_C" -
其中REVISION
指的是意外提交File_C
的提交。第一个命令为相关文件生成反向差异。它的输出通过管道传输到hg import
(不要忘记尾随-
)。
更新:您还可以使用退出命令:
hg backout -I File_C REVISION
hg commit -m "Revert changes of File_C in REVISION" File_C
backout命令会更改您的工作副本,因为它会撤消对rev中提交的File_C
的更改。 REVISION
。然后明确提交恢复。
答案 2 :(得分:3)
您可以使用 hg rollback
撤消上次提交,然后重新执行此操作,这次没有文件C
。
(如Mercurial FAQ中所述,以及此FAQ entry中注意到“回滚事务时没有备份”,因此请谨慎使用)
答案 3 :(得分:2)
hg revert FILE -r REVISION
您可以通过
将其还原为上次提交hg revert FILE -r .~1
答案 4 :(得分:0)
您还可以使用交互模式:
hg revert -i -r .^
选择要还原的内容并确认。
hg amend