如何删除Mercurial中的提交?

我想完全删除一个Mercurial的提交,就好像它从来没有进入仓库,并回到我之前的提交。

这可能吗?

如果这是你最后一次提交,而你没有将它推到任何地方,你可以通过rollback 。 否则,不。 不是真的。 时间来改变你的密码。

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

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

  • 为此,你需要去文件 – >设置 – >扩展。
  • 检查mq并重新启动gui。
  • 之后,只需右键单击不需要的提交和ModifyHistory-> Strip

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

  hg histedit 45:c3a3a271d11c 

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

 abort: can't rebase immutable changeset 43ab8134e7af 

这意味着Mecurial认为这是一个已经被推动的公共变革(见阶段 ) – 你可以强制它再次成为draft

 hg phase -f -d 45:c3a3a271d11c 

我经常遇到这个。 我做了一个提交, 然后拉推。 但是接下来有什么东西让我新做的提交是不必要的。 一个简单的hg rollback是不够的,因为它只解除了拉…

这是要做的事情:

 hg strip <rev> 

当你不把变化集放到任何地方的时候,事情就是无痛的。

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

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

如果它不止一个提交和/或你已经把它推到别的地方,你可以克隆你的仓库,并指定应该克隆的最后一个变更集。

在这里看到我的答案如何做到这一点:
Mercurial:修复一个博克的历史

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

如果您已经推送到某个远程存储库,您将不得不用克隆replace它。
当然这取决于你是否能够(或允许)这样做。

如果使用乌龟,你可以使用修改历史>条…

是。 除非我误认为,从v2.3(rel。2012/08/01)开始,可以使用带有drop命令的HisteditExtension来删除提交,同时删除或backout以删除更改。

一个简单的谷歌searchfunction: https : //www.google.com/webhp#q=histedit+drop