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

时间:2010-12-23 16:41:02

标签: mercurial

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

注意:

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

4 个答案:

答案 0 :(得分:82)

使用strip命令:

hg strip -r 2039

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

[extensions]
strip =

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

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

答案 1 :(得分:19)

克隆本地仓库应该很快。我假设“几分钟”是指远程回购?

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

答案 2 :(得分:12)

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

 hg backout -r (changeset number)

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

  hg strip -r (changeset number)

答案 3 :(得分:7)

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

[extensions]

hgext.mq =

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

Strip信息过去为here,但现在可以找到here