我不小心做了一个“hg commit --amend”而不是一次提交。如何在修改之前回滚提交?
答案 0 :(得分:55)
您可以使用hg reflog
(来自journal extension)和hg reset <hash>
。
hg reflog -v
应该给出类似的东西:
<old-hash> -> <new-hash> <user> <timestamp> commit --amend <some-path>
如果这是你想要修改的修改,只需使用:
hg reset <old-hash>
提交将恢复到以前的状态,修改后的更改现在应该是未提交的更改(使用hg status
和hg diff
进行检查。)
答案 1 :(得分:4)
.hg/strip-backup
目录hg unbundle .hg/strip-backup/<latest backup>
histedit
扩展名,你可以在其上hg histedit
进行更改(例如选择edit
以便在提交之前达到状态,即当你可以使用hg diff
查看所有更改。 别忘了剥去旧脑袋。
答案 2 :(得分:3)
如果您的Mercurial版本足够新,我相信您应该能够使用Mercurial附带的hg unamend
扩展名中的uncommit
命令。我不确定这可能需要启用过时标记。
启用uncommit
扩展名,并将其添加到您的~/.hgrc
:
[extensions]
uncommit =
实际上执行了修改:
hg unamend
答案 3 :(得分:-3)
注意:此答案现已弃用。请参阅@Sorina Sandu的the answer。
请参阅hg help commit
,其中包含:
--amend标志可用于修改工作的父级 包含父项更改的新提交的目录 除了目前由“hg status”报告的那些,如果有的话。 旧提交存储在“.hg / strip-backup”的备份包中(请参阅 关于如何恢复它的“hg help bundle”和“hg help unbundle”。