29

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

4

4 回答 4

62

您可以使用hg reflog(来自期刊扩展名)和hg reset <hash>.

hg reflog -v

应该给出类似的东西:

<old-hash> -> <new-hash> <user> <timestamp>  commit --amend <some-path>

如果这是您要恢复的修改,只需使用:

hg reset <old-hash>

提交将恢复到以前的状态,并且已修改的更改现在应该是未提交的更改(使用hg statusand进行检查hg diff)。

于 2015-07-08T20:24:47.140 回答
10

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

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

    [extensions]
    uncommit =
    
  2. 实际运行未修改:

    hg unamend
    
于 2019-02-08T20:22:21.097 回答
5
  1. .hg/strip-backup在目录中查找最新保存的备份
  2. hg unbundle .hg/strip-backup/<latest backup>
  3. 现在你应该有两个头 - 一个带有修改后的提交,另一个带有两个提交(第一个 - 修改前的旧提交,第二个被称为:“临时修改提交(旧提交哈希)”。
  4. 如果您有histedit扩展名,您可以hg histedit对其进行更改以更改它(例如,选择edit以在提交之前实现状态,即当您可以使用 看到所有更改时hg diff)。

别忘了剥掉老头。

于 2016-07-29T05:42:27.120 回答
-4

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


hg help commit,它说:

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

于 2013-05-22T18:46:28.813 回答