Mercurial撤消上次提交

Mar*_*erl 122 mercurial tortoisehg mercurial-commit

如何撤消Mercurial中最后一次意外提交(未推送)的更改?

如果可能的话,首选使用TortoiseHg的方法.

更新

在我的具体案例中,我提交了一个变更集(未推送).然后我从服务器拉出并更新.有了这些新的更新,我决定,我的上次提交已经过时,我不想同步它.所以看起来,这hg rollback并不是我正在寻找的东西,因为它会回滚拉而不是我的提交.

Von*_*onC 75

一种方法是 hg rollback (自2013年8月Hg2.7起弃用)

请使用hg commit --amend而不是rollback纠正上次提交中的错误.

回滚存储库中的最后一个事务.

提交合并,水银增加了变更的最后一项.
Mercurial在交易之前保留所触及的每个文件的名称及其长度的事务日志.在中止时,它会将每个文件截断为其先前的长度.这种简单性是使revlog仅附加的一个好处.事务日志还允许撤消操作.

参见TortoiseHg Recovery部分:

替代文字

这个帖子还详细介绍了hg rollback和之间的区别hg strip:(
Martin Geisler撰写,他也为SO做出贡献)

  • ' hg rollback'将删除最后一笔交易.事务是数据库中常见的概念.在Mercurial中,我们在运行某些操作时启动事务,例如commit,push,pull ...
    当操作成功完成时,事务被标记为完成.如果发生错误,则事务将"回滚",并且存储库将保持与之前相同的状态.
    您可以使用'hg rollback'手动触发回滚.这将撤消最后一个事务命令.如果pull命令将10个新的更改集带入不同分支的存储库中,那么' hg rollback'将全部删除它们.请注意:回滚交易时没有备份!

  • ' hg strip'将删除变更集及其所有后代.变更集将另存为捆绑包,如果需要,可以再次应用.

ForeverWintr在评论中提出(2016年,5年后)

您可以通过先忘记它们来"解除"提交文件,例如:hg forget filea; hg commit --amend,但这似乎不直观.
hg strip --keep现代hg可能是更好的解决方案.

  • 我不确定`hg commit --amend`应该如何工作,但对我来说它给了我一个修改提交消息的编辑器,没有方法来改变包含哪些文件.我没有保存退出编辑器,发现我的错误提交已更改为包含_ALL_已更改的文件! (2认同)
  • 我不清楚如何使用`hg commit --amend`完成问题的答案。您可以通过先“ hg忘记”文件来“取消提交”文件,例如:hg commit --amend`,但这似乎并不直观。[hg strip --keep](http://stackoverflow.com/a/19064016/1286571)可能是现代hg的更好解决方案。 (2认同)

Pet*_*ham 45

hg strip 将从存储库中完全删除修订版(以及任何后代).

要使用strip,您需要通过将以下行添加到.hgrc(或mercurial.ini)来安装MqExtension:

[extensions]
mq =
Run Code Online (Sandbox Code Playgroud)

在TortoiseHg中,strip命令可在工作台中找到.右键单击修订并选择"修改历史记录" - >"剥离".

由于strip更改了存储库的历史记录,因此您只应在尚未与任何人共享的修订版本上使用它.如果您使用的是mercurial 2.1+,则可以使用阶段来跟踪此信息.如果提交仍处于草稿阶段,则尚未与其他存储库共享,因此您可以安全地将其删除.(感谢Zasurus指出这一点).

  • 如果你安装了TortoiseHg,那么有一个全局激活mq的图形界面.在当前版本中:启用"file-> settings-> global settings tab-> extensions-> mq"或通过"编辑文件"按钮访问设置文件. (4认同)
  • 如果有问题的修订仍然在草案短语中(或者您可以访问所有已经推送/拉出的回购并将条带应用于所有回购)(这是本说明中的情况)那么这是sooo最好,最干净的选择. (2认同)

Ry4*_*ase 19

由于你无法回滚,你应该将该提交合并到你拉动时的新头部.如果您不想要其中的任何工作,您可以使用此提示轻松完成.

因此,如果您已经拉到并更新到他们的头部,您可以这样做:

hg --config ui.merge=internal:local merge
Run Code Online (Sandbox Code Playgroud)

保留当前检出的修订版中的所有更改,以及未检出的修订版(您编写的不再需要的修订版)中的所有更改.

这是一个很好的方法,因为它保持您的历史准确和完整.如果从现在起2年后有人发现你所拉下来的一个错误,你可以查看同一件事的(未使用但已保存)实现,然后去"哦,我做对了".:)


Tim*_*gan 5

hg rollback 是你想要的.

在TortoiseHg中,hg rollback在提交对话框中完成.打开提交对话框,然后选择"撤消".

替代文字