你如何"回滚"Mercurial的最后一次提交?

ser*_*hio 65 mercurial commit rollback

我有一个Mercurial存储库,我只在本地使用...这是我的个人用法(所以我不会"推"到任何地方).

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

有没有办法"回滚"我的最后一次(最新的,只有一次)提交,并"重新发送"它与正确的文件?

(我不知道为什么,但我的" 修改当前修订版 "选项不活动,所以我不能用它...)

Mar*_*den 91

你只需要这个命令:

hg rollback
Run Code Online (Sandbox Code Playgroud)

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

(从技术上讲,这是从2013年8月的2.7版本开始被弃用的,但是我还没有看到完全相同的替代方案.)

  • 不推荐使用hg rollback,应该使用hg commit --amend.请参阅http://stackoverflow.com/questions/4760684/mercurial-undo-last-commit (8认同)
  • @fnt:如果您在这种情况下显示*how*`hg commit --amend`可用于替换`hg rollback`,那么您的注释会更有用. (8认同)
  • @fnt很遗憾`hg commit --amend`只是*不是'hg rollback`的替代品.虽然它可以用来*添加新的*更改(或更改消息),祝你好运*不添加*更改.."[修改]可用于修改工作目录的父级,使用新的提交包含父*中的更改以及*当前由hg状态报告的那些(如果有的话).TortoiseHG Workbench做了一些魔术允许'记录像'大块选择,这确实可以这样:但是*不是*通过使用`hg commit --amend`作为一般的'hg revert`替换. (7认同)
  • 我通过接口找到了如何做到这一点:Repository => Rollback\Undo(Ctrl + U).谢谢! (2认同)
  • $ hg commit --amend -i结果为"hg commit:option -i not recognized". (2认同)

Mug*_*ica 31

答案是条带(如果你没有启用它,你可以在这里检查如何启用它:https://stackoverflow.com/a/18832892/179581).

如果您只想恢复最新的提交使用:

hg strip --keep -r .
Run Code Online (Sandbox Code Playgroud)

如果要还原为特定提交:

hg strip --keep -r 1234
Run Code Online (Sandbox Code Playgroud)

使用strip会将文件的状态恢复为指定的提交,但是您将它们作为挂起的更改,因此您可以将它们与文件一起应用于新的提交.

恢复已剥离的数据:

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

关于如何恢复文件的教程,或只是google for it(在所有操作系统上都一样).

感谢ForeverWintr

  • Strip 是默认情况下未启用的扩展。请参阅 /sf/answers/1318302471/ 如何启用它 (2认同)

Mar*_*tin 6

在现代汞中:

hg uncommit

或者,对于您的具体问题:

hg add file4
hg amend
Run Code Online (Sandbox Code Playgroud)