你如何在 Mercurial 上“回滚”最后一次提交?

Posted

技术标签:

【中文标题】你如何在 Mercurial 上“回滚”最后一次提交?【英文标题】:How do you "rollback" last commit on Mercurial? 【发布时间】:2013-12-26 13:51:05 【问题描述】:

我有一个仅在本地使用的 Mercurial 存储库...仅供我个人使用(所以我不会“推送”任何地方)。

我提交了 3 个文件,但之后我明白我应该提交 4 个文件...

有没有办法“回滚”我的上次(最新的,只有一次)提交,并使用正确的文件“重新提交”它?

(我不知道为什么,但是我的“修改当前版本”选项没有激活,所以我不能使用它...)

【问题讨论】:

Mercurial undo last commit的可能重复 使用hg strip --keep -r .***.com/a/19064016/1286571 Mercurial (hg) equivalent of git reset (--mixed or --soft)的可能重复 对于以后来这里的人来说,重要的是关于“修改当前修订选项未激活”的注释。 修改当前版本是最好的选择如果你能做到的话。 【参考方案1】:

你只需要这个命令:

hg rollback

请参阅:http://hgbook.red-bean.com/read/finding-and-fixing-mistakes.html

(从技术上讲,这在 2013 年 8 月的 2.7 版中已被弃用,但我还没有看到可以做完全相同的事情的替代方案。)

【讨论】:

我通过界面找到了如何做到这一点:Repository=>Rollback\Undo (Ctrl+U)。谢谢! hg 回滚已弃用,应使用 hg commit --amend。请看***.com/questions/4760684/mercurial-undo-last-commit @fnt 很遗憾hg commit --amend 只是不是替代hg rollback。虽然它可以用于添加新的更改(或更改消息),但祝它不添加更改。“[amend] 可用于修改" TortoiseHG 工作台做了一些神奇的事情来允许“记录”大块选择,这确实可以做到这一点:但那不是使用hg commit --amend 作为一般的hg revert 替换。 $ hg commit --amend -i 结果为“hg commit: option -i not Recognized”。 @fnt:如果您展示了如何在这种情况下hg commit --amend 可用于替换hg rollback,您的 cmets 会更有用。【参考方案2】:

答案是strip(如果你没有启用它,你可以在这里查看如何启用它:https://***.com/a/18832892/179581)。

如果您只想恢复最新的提交,请使用:

hg strip --keep -r .

如果你想恢复到特定的提交:

hg strip --keep -r 1234

使用 strip 会将您的文件状态恢复到指定的提交,但您会将它们作为待处理的更改,因此您可以将它们与您的文件一起应用于新的提交。

恢复剥离的数据:

如果您错过了使用该命令或想要恢复您的更改,您可以在 .hg/strip-backup 文件夹中找到已剥离的文件。

Tutorial on how to restore your files, or just google for it (works the same on all OS).

感谢ForeverWintr

【讨论】:

这对我来说非常有效。包括 '--keep' 将那些未完成的提交文件带回挂起状态,以便您可以丢弃/搁置或再次提交。谢谢。 (顺便说一下,我使用了 SourceTree) Strip 是默认不启用的扩展。开启方法见***.com/a/18832892/179581 要在 TortoiseHg 4.7 或更高版本中启用条扩展,请使用文件 > 设置 > 扩展然后复选框条,然后重新启动 TortoiseHg。使用 View > ShowConsole 显示 Hg 命令行以输入例如hg strip --keep -r 50.【参考方案3】:

现代汞:

hg uncommit

或者,对于您的确切问题:

hg add file4
hg amend

【讨论】:

以上是关于你如何在 Mercurial 上“回滚”最后一次提交?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Mercurial 只有一级回滚?

ElasticsearchElasticsearch 缓存深度剖析:一次提高一种缓存的查询速度

在 Mercurial 中回滚多个提交(在推送到公共之前)

Elasticsearch 缓存深度剖析:一次提高一种缓存的查询速度

我们可以撤消 Mercurial 中的推送更改吗?

Elasticsearch 缓存深度剖析:一次提高一种缓存的查询速度