如何在Mercurial中删除提交?

mdp*_*mdp 55 mercurial mercurial-commit

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

这可能吗?

nmi*_*els 33

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

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


小智 29

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

  • 为此,您需要转到File-> Settings-> Extensions.
  • 检查mq并重启gui.
  • 然后右键单击不需要的提交和ModifyHistory-> Strip


Dan*_*ski 10

要编辑历史记录,我将使用Histedit Extension扩展.

 hg histedit 45:c3a3a271d11c
Run Code Online (Sandbox Code Playgroud)

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

abort: can't rebase immutable changeset 43ab8134e7af
Run Code Online (Sandbox Code Playgroud)

这意味着Mecurial认为这是一个已被推动的公共变更集(见阶段) - 你可以强迫它draft再次做:

hg phase -f -d 45:c3a3a271d11c
Run Code Online (Sandbox Code Playgroud)


unp*_*680 6

我经常遇到这种情况.我做了一个提交,然后拉动推.但是后来有一些东西让我新制作的提交变得不必要了.平原hg rollback是不够的,因为它只能解除拉力......

这是要做的事情:

hg strip <rev>
Run Code Online (Sandbox Code Playgroud)

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


Jer*_*ock 5

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

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


Chr*_*cht 5

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

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

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

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