如何从特定的Mercurial克隆中删除某些更改集?

Syl*_*ain 50 mercurial

我在rev 2048上有一个中央仓库的克隆.我想删除我当地仓库中的最后10个变更集,好像我两周前回来了.我想我可以删除我的本地仓库,"hg clone -rev 2038"但这样做会很长(克隆仓库需要几分钟).有没有办法只是"取消"一些变更集?

笔记:

  • 我不是要退出变更集.我最终将从中央回购中再次提取这些变更集.
  • 我不是试图将工作目录更新为早期版本; 我真的想影响存储库.
  • 我目前的仓库和工作目录中没有任何外向变更集或待修改.

Wim*_*nen 83

使用strip命令:

hg strip -r 2039
Run Code Online (Sandbox Code Playgroud)

此命令由StripExtension提供.它作为Mercurial 2.8及更高版本的一部分进行分发,但您需要首先通过向.hgrc或Mercurial.ini添加以下行来启用它:

[extensions]
strip =
Run Code Online (Sandbox Code Playgroud)

在Mercurial 2.8之前,它是MqExtension的一部分.

为防止您意外破坏历史记录,该命令将生成一个备份捆绑包,如果需要.hg/strip-backup/,您可以hg unbundle再次使用该捆绑包.

  • 请注意,`strip`应仅用于未发布的更改集. (10认同)

Mar*_*nen 19

克隆你的本地回购应该很快.我假设"几分钟"是指远程回购?

您可以使用hg clone <local repo> <new repo> -r <revision>仅克隆到某个修订版本.

  • +1; 虽然我认为Martinho的评论是这种情况下的"答案"(如果你想让改变集无论如何都为什么会打扰"无法解决"),重要的是要强调从本地回购中克隆是可能的并给出完全相同的结果在更短的时间内.从本地克隆后,更新`.hg/hgrc`中的`[paths]`再次指向远程. (2认同)

Shw*_*eta 12

要删除已提交并推送的变更集,请使用:

 hg backout -r (changeset number)

要删除已提交但未推送的变更集,请使用:

  hg strip -r (changeset number)


Yma*_*rst 7

对于Mercurial 2.8之前的版本,Strip是MqExtension的一部分.
如果您需要启用旧的MQ Extensions,可以通过添加以下命令来实现:

[extensions]

hgext.mq =
Run Code Online (Sandbox Code Playgroud)

到你的〜/ .hgrc(或mercurial.ini)文件.

Strip信息曾经在这里,但现在可以在这里找到.