Mar*_*erl 122 mercurial tortoisehg mercurial-commit
如何撤消Mercurial中最后一次意外提交(未推送)的更改?
如果可能的话,首选使用TortoiseHg的方法.
更新
在我的具体案例中,我提交了一个变更集(未推送).然后我从服务器拉出并更新.有了这些新的更新,我决定,我的上次提交已经过时,我不想同步它.所以看起来,这hg rollback并不是我正在寻找的东西,因为它会回滚拉而不是我的提交.
Von*_*onC 75
一种方法是 (自2013年8月Hg2.7起弃用)hg rollback
请使用
hg commit --amend而不是rollback纠正上次提交中的错误.回滚存储库中的最后一个事务.
当提交或合并,水银增加了变更的最后一项.
Mercurial在交易之前保留所触及的每个文件的名称及其长度的事务日志.在中止时,它会将每个文件截断为其先前的长度.这种简单性是使revlog仅附加的一个好处.事务日志还允许撤消操作.

这个帖子还详细介绍了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可能是更好的解决方案.
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指出这一点).
Ry4*_*ase 19
由于你无法回滚,你应该将该提交合并到你拉动时的新头部.如果您不想要其中的任何工作,您可以使用此提示轻松完成.
因此,如果您已经拉到并更新到他们的头部,您可以这样做:
hg --config ui.merge=internal:local merge
Run Code Online (Sandbox Code Playgroud)
保留当前检出的修订版中的所有更改,以及未检出的修订版(您编写的不再需要的修订版)中的所有更改.
这是一个很好的方法,因为它保持您的历史准确和完整.如果从现在起2年后有人发现你所拉下来的一个错误,你可以查看同一件事的(未使用但已保存)实现,然后去"哦,我做对了".:)
| 归档时间: |
|
| 查看次数: |
129126 次 |
| 最近记录: |