Mercurial:如何撤消上次未执行的提交?

cro*_*bar 34 mercurial

我不小心提交了我的本地存储库.更具体地说,当我打算一次提交一个文件时,我同时对大量文件进行了更改.

如何撤消此提交并将我的工作副本恢复到提交之前的状态,这样我就可以做我应该做的事情了?

提交后我没有推或拉或其他任何东西.


您可能怀疑这是重复的,因此我将解释为什么以下问题不同,或者不回答我的问题:

Mercurial撤消上次提交

对此问题的回答表明,您可以执行此操作hg commit --amend,但不解释如何执行此操作或举例说明.mercurail帮助也没有为我说明.

你如何"回滚"Mercurial的最后一次提交?

国家使用hg rollback.这个命令显然已被弃用了,我还是尝试使用它,但是我得到了混乱:没有可用的回滚信息.遗憾的是,这不起作用,因为这将是一种非常直观的方式来实现我想要的.

mao*_*urf 43

根据这个问题的信息:

hg strip --keep --rev .
--keep: do not modify working directory during strip
--rev . (点表示最后一次提交.读取sid0关于后代的答案)


对于那些更熟悉git语言的人,您正在寻找 git reset --mixed HEAD^

hard 这会丢弃你的变化,使你的工作"消失"(我认为这不是一个选择)

soft 将撤消提交,但保持以前提交的文件索引(即跟踪)

mixed保持您更改的文件到位,但告诉索引撤消提交.在git-speak:git st会说Changes not staged for commit


另请参阅git-reset docs,差异git reset soft/mixed,git/hg命令等价表


cro*_*bar 26

好的,我想我找到了答案,就是启用strip扩展,并使用以下命令:

hg strip -r -1 --keep
Run Code Online (Sandbox Code Playgroud)

这将从repostiory(-r -1位)剥离最后一个修订版,该--keep选项意味着不对工作副本进行任何更改.因此,您最终会得到一个与提交之前完全相同的工作副本,并且最终没有在存储库中提交.

我不是一个善变的专家,所以使用风险自负.

  • 1.仅当您修改了工作目录并希望保留这些更改时,才需要JFYI`-- keep`.如果你想"......让我的工作副本恢复到提交之前的状态",你可以跳过--keep 2."strip命令删除指定的变更集及其所有后代" - 你的情况(删除)提示)这是不相关的,但通常情况下,使用`histedit`扩展可以更好地删除历史中间的提交 (3认同)
  • 好吧,为了让我的工作副本恢复到我提交之前的状态,你必须使用`--keep`,否则你将回到之前的提交,而不是回到之前的状态承诺. (3认同)