如何撤消 Mercurial 中上次意外提交(未推送)的更改?
如果可能的话,最好使用 TortoiseHg 来实现这一点。
Update
在我的具体案例中,我提交了一个变更集(未推送)。然后我从服务器上拉取并更新。通过这些新的更新,我决定我的上次提交已过时,我不想同步它。如此看来,那hg rollback
不完全是我正在寻找的,因为它会回滚拉取而不是我的提交。
One way would be hg rollback http://www.selenic.com/mercurial/hg.1.html#rollback (deprecated as of Hg2.7, August 2013)
请用hg commit --amend http://www.selenic.com/mercurial/hg.1.html#commit代替rollback
纠正上次提交中的错误。
回滚存储库中的最后一个事务。
When 承诺 http://www.selenic.com/mercurial/hg.1.html#commit or merging https://www.mercurial-scm.org/wiki/Merge, Mercurial 添加了变更集 https://www.mercurial-scm.org/wiki/ChangeSet最后进入。
Mercurial 会保存事务日志,其中包含事务之前所接触的每个文件的名称及其长度。中止时,它将每个文件截断为其先前的长度。这种简单性是制作的好处之一revlogs https://www.mercurial-scm.org/wiki/Revlog仅附加。事务日志还允许撤消操作。
See TortoiseHg 恢复部分 http://tortoisehg.bitbucket.io/manual/1.0/recovery.html:
这个线程 http://www.selenic.com/pipermail/mercurial/2009-July/026834.html还详细说明了之间的区别hg rollback
and hg strip
:
(由马丁·盖斯勒 https://stackoverflow.com/users/110204/martin-geisler谁也对 SO 做出了贡献)
'hg rollback
' 将删除最后一笔交易。事务是数据库中常见的一个概念。在 Mercurial 中,我们在运行某些操作时启动事务,例如提交、推送、拉取......
当操作成功完成时,事务被标记为完成。如果发生错误,事务将“回滚”,并且存储库将保持与之前相同的状态。
您可以使用“hg rollback”手动触发回滚。这将撤消最后一个事务命令。如果 pull 命令将 10 个新变更集带入不同分支上的存储库,那么 'hg rollback
' 将把它们全部删除。
请注意:有没有备份当您回滚事务时!
'hg strip
' 将删除变更集及其所有后代。这
变更集保存为捆绑包,如果您可以再次应用它
需要他们回来。
永远的冬天 https://stackoverflow.com/users/1286571/foreverwintr评论中建议(2016年,5年后)
您可以通过首先 hg 忘记它们来“取消提交”文件,例如:hg forget filea; hg commit --amend
,但这似乎不直观。
hg strip --keep https://stackoverflow.com/a/19064016/6309对于现代汞来说可能是更好的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)