您如何“回滚” Mercurial的最后一次提交?


67

我有一个Mercurial资料库,只能在本地使用...仅供我个人使用(因此,我不会在任何地方“推送”)。

我提交了3个文件,但之后我知道我应该提交4个文件...

有没有一种方法可以“回滚”我的最后一个(最新的,只有一个)提交,并使用正确的文件“重新提交”它?

(我不知道为什么,但是我的“修改当前修订版本”选项未激活,因此无法使用...)





对于以后再来的人们,重要的是有关“修改当前修订选项未激活”的注意事项。如果可以的话,修改当前版本是最好的选择
PhoneixS

Answers:


96

您只需要以下命令:

hg rollback

请参阅:http : //hgbook.red-bean.com/read/finding-and-fixing-mistakes.html

(从技术上讲,自2013年8月的2.7版起已弃用此功能,但我尚未看到具有完全相同功能的替代方法。)


3
我发现如何通过界面执行此操作:Repository => Rollback \ Undo(Ctrl + U)。谢谢!
serhio 2013年

8
不建议使用hg rollback,应使用hg commit --amend。请参阅stackoverflow.com/questions/4760684/mercurial-undo-last-commit
2014年

7
@fnt这是一个耻辱,hg commit --amend根本进行更换hg rollback。虽然可以使用它来添加新更改(或更改消息),但是很幸运,不要添加更改。父级以及当前由hg状态报告的父级(如果有)。” 该TortoiseHG工作台做一些魔法,让大块的选择“喜欢记录”,这的确可以这样:但就是使用hg commit --amend作为一般hg revert更换。
user2864740 2015年

2
$ hg commit --amend -i结果为“ hg commit:选项-i无法识别”。
kguest

10
@fnt:如果您展示 在这种情况下hg commit --amend可以用来代替的话,您的评论会更有用hg rollback
ForeverWintr '16

32

答案是带状的(如果您未启用它,则可以在此处查看如何启用它:https : //stackoverflow.com/a/18832892/179581)。

如果您只想还原最新的提交,请使用:

hg strip --keep -r .

如果要还原为特定的提交,请执行以下操作:

hg strip --keep -r 1234

使用strip会将文件的状态还原为指定的提交,但是您会将它们作为待处理的更改,因此可以将它们与文件一起应用于新的提交。

恢复剥离的数据:

如果您错过了该命令或要恢复更改,则可以在.hg / strip-backup文件夹中找到已剥离的文件。

有关如何还原文件的教程,或者仅是Google的还原教程(在所有操作系统上均相同)。

感谢ForeverWintr


这对我来说非常有效。包括'--keep'会使那些未完成的提交文件返回到待处理状态,因此您可以丢弃/搁置或再次提交。谢谢。(顺便说一下,我使用了SourceTree)
Molik Miah

1
Strip是默认情况下未启用的扩展。请参阅stackoverflow.com/a/18832892/179581如何启用它
Andrei,

要在TortoiseHg 4.7或更高版本中启用扩展名扩展,请使用“文件”>“设置”>“扩展名”,然后选中“ Strip”,然后重新启动TortoiseHg。使用视图> ShowConsole以显示汞命令行--keep -r 50.在例如汞柱条输入
阿萨德的Ebrahim

3

在现代汞:

hg uncommit

或者,对于您的确切问题:

hg add file4
hg amend
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.