如何在Mercurial中删除提交?

时间:2011-02-22 22:41:48

标签: mercurial mercurial-commit

我想完全删除Mercurial提交,就好像它从未在存储库中输入并返回到之前的提交一样。

这可能吗?

8 个答案:

答案 0 :(得分:33)

如果这是你最后一次提交而你没有把它推到任何地方,你可以用rollback来做。否则,没有。并不是的。是时候更改密码了。

编辑:有人指出,您可以从旧版本克隆并合并您要保留的更改。这也是事实,除非你把它推到你无法控制的回购中。一旦推送,您的数据很可能很难回复。

答案 1 :(得分:29)

您可以尝试删除有关提交的mq信息。

  • 为此,您需要转到File-> Settings-> Extensions。
  • 检查mq并重启gui。
  • 之后只需右键单击不需要的提交即可 ModifyHistory->条

答案 2 :(得分:10)

要编辑历史记录,我会使用Histedit Extension扩展名。

 hg histedit 45:c3a3a271d11c

但是请记住,这只有在您尚未将提交推送到公共存储库的情况下才有意义,您拥有公共存储库和/或您可以考虑所有克隆。如果您收到以下错误:

abort: can't rebase immutable changeset 43ab8134e7af

这意味着Mecurial认为这是一个已被推动的公共变更集(请参阅phases) - 您可以强制它再次成为draft

hg phase -f -d 45:c3a3a271d11c

答案 3 :(得分:6)

我经常遇到这种情况。我做了一个提交,然后拉动推送。但是后来有一些东西让我新制作的提交变得不必要了。简单的hg rollback是不够的,因为它只会撤消拉动......

这是要做的事情:

hg strip <rev>

当你不把你的变更集推到任何地方时,事情是无痛的。

答案 4 :(得分:5)

您可以使用“hg backout”进行反向合并。所有选项都在免费提供的书“Mercurial:The Definitive Guide”中讨论:

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

答案 5 :(得分:5)

如果它是多次提交和/或您已将其推送到其他位置,则可以克隆存储库并指定应克隆的最后一个更改集。

请在此处查看我的答案如何执行此操作:
Mercurial: Fix a borked history

如果你只在本地提交但没有推送,你可以在本地创建一个克隆(如我的链接所述),你就完成了。

如果您已经推送到某个远程存储库,则必须将其替换为您的克隆 当然,这取决于你是否能够(或允许)这样做。

答案 6 :(得分:3)

如果使用乌龟,您可以使用修改历史记录&gt;条...

答案 7 :(得分:1)

是。除非我弄错了,从v2.3(rel.2012 / 08/01)开始,您可以使用HisteditExtension drop 命令删除提交,以及{{1} }或strip删除更改。

对该功能进行简单的Google搜索:https://www.google.com/webhp#q=histedit+drop