56

我想完全删除一个 Mercurial 提交,就好像它从未进入存储库一样,然后回到我之前的提交。

这可能吗?

4

8 回答 8

33

如果这是您的最后一次提交并且您没有将其推送到任何地方,您可以使用rollback. 否则,没有。并不真地。是时候更改密码了。

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

于 2011-02-22T22:45:09.930 回答
30

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

  • 为此,您需要转到文件->设置->扩展。
  • 检查 mq 并重新启动 gui。
  • 之后只需右键单击不需要的提交和 ModifyHistory->Strip
于 2011-12-15T12:28:54.793 回答
12

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

 hg histedit 45:c3a3a271d11c

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

abort: can't rebase immutable changeset 43ab8134e7af

这意味着 Mecurial 认为这是一个已被推送的公共变更集(请参阅阶段draft) - 您可以强制它再次执行:

hg phase -f -d 45:c3a3a271d11c
于 2013-08-29T20:29:27.467 回答
6

我经常遇到这种情况。我做出承诺,然后拉推。但是后来有一些东西使我新提交的提交变得不必要。平原hg rollback是不够的,因为它只会解除拉力......

这是要做的事情:

hg strip <rev>

当您不将变更集推送到任何地方时,事情就会变得轻松。

于 2014-01-13T09:59:37.520 回答
5

您基本上可以使用“hg backout”进行反向合并。所有选项都在免费提供的书“Mercurial:权威指南”中进行了讨论:

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

于 2011-02-22T22:46:33.397 回答
5

如果它不止一个提交和/或您已经将它推送到其他地方,您可以克隆您的存储库并指定应该克隆的最后一个变更集。

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

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

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

于 2011-02-22T23:48:47.193 回答
3

如果使用乌龟,你可以使用修改历史>剥离...

于 2012-12-04T13:23:03.953 回答
1

是的。除非我弄错了,从 v2.3(rel. 2012/08/01)开始,您可以使用 HisteditExtension dropstrip命令来删除提交,以及backout删除更改。

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

于 2014-07-26T19:57:30.063 回答