Mercurial:回滚“hg commit --amend”。

时间:2013-05-22 16:49:38

标签: mercurial

我不小心做了一个“hg commit --amend”而不是一次提交。如何在修改之前回滚提交?

4 个答案:

答案 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 statushg diff进行检查。)

答案 1 :(得分:4)

  1. .hg/strip-backup目录
  2. 中查找最新保存的备份
  3. hg unbundle .hg/strip-backup/<latest backup>
  4. 现在你应该有两个脑袋 - 一个带有修改后的提交,另一个带有两个提交(第一个 - 旧修改前修改,第二个修改:&#34;临时修改提交(旧提交哈希)&#34 ;。
  5. 如果你有histedit扩展名,你可以在其上hg histedit进行更改(例如选择edit以便在提交之前达到状态,即当你可以使用hg diff查看所有更改。
  6. 别忘了剥去旧脑袋。

答案 2 :(得分:3)

如果您的Mercurial版本足够新,我相信您应该能够使用Mercurial附带的hg unamend扩展名中的uncommit命令。我不确定这可能需要启用过时标记。

  1. 启用uncommit扩展名,并将其添加到您的~/.hgrc

    [extensions]
    uncommit =
    
  2. 实际上执行了修改:

    hg unamend
    

答案 3 :(得分:-3)

注意:此答案现已弃用。请参阅@Sorina Sandu的the answer


请参阅hg help commit,其中包含:

  

--amend标志可用于修改工作的父级   包含父项更改的新提交的目录   除了目前由“hg status”报告的那些,如果有的话。   旧提交存储在“.hg / strip-backup”的备份包中(请参阅   关于如何恢复它的“hg help bundle”和“hg help unbundle”。