如何从特定Mercurial克隆中删除某些变更集?
我有一个版本为2048的中央回购的克隆。我想删除本地回购协议上的最后10个变更集,就像两周前我回到了时间一样。我想我可以删除我的本地回购协议并执行如何从特定Mercurial克隆中删除某些变更集?,mercurial,Mercurial,我有一个版本为2048的中央回购的克隆。我想删除本地回购协议上的最后10个变更集,就像两周前我回到了时间一样。我想我可以删除我的本地回购协议并执行“hg clone-rev 2038”,但那会很长(克隆回购协议需要几分钟)。有没有办法“取消”一些变更集 注: 我不是在试图撤销变更集。我最终会再次从中央回购中提取这些变更集 我没有试图将工作目录更新为早期版本;我真的很想影响存储库 我当前的repo和工作目录中没有任何传出的变更集或挂起的修改 克隆本地回购协议应该很快。我想“几分钟”指的是远程回购
“hg clone-rev 2038”
,但那会很长(克隆回购协议需要几分钟)。有没有办法“取消”一些变更集
注:
- 我不是在试图撤销变更集。我最终会再次从中央回购中提取这些变更集
- 我没有试图将工作目录更新为早期版本;我真的很想影响存储库
- 我当前的repo和工作目录中没有任何传出的变更集或挂起的修改
hg clone-r
仅克隆到特定版本。使用strip命令:
hg strip -r 2039
此命令由提供。它是作为Mercurial 2.8及更高版本的一部分发布的,但您确实需要首先通过在.hgrc或Mercurial.ini中添加以下行来启用它:
[extensions]
strip =
在Mercurial 2.8之前,它是
为了防止意外破坏历史记录,该命令将在
.hg/strip backup/
中生成一个备份包,您可以根据需要再次hg unbundle
。对于Mercurial 2.8之前的版本,该备份包是MqExtension的一部分。如果需要启用旧的MQ扩展, 您可以通过添加以下内容来完成此操作:
[extensions]
hgext.mq =
到~/.hgrc(或mercurial.ini)文件
以前是条带信息,但现在可以找到它。要删除已提交并推送的变更集,请使用: hg backout -r (changeset number) hg strip -r (changeset number) hg回退-r(变更集编号)
要删除已提交但未推送的变更集,请使用: hg backout -r (changeset number) hg strip -r (changeset number) hg条带-r(变更集编号)
你想这样做有什么原因吗?我不明白这有什么意义,如果你以后还要拉变更集的话。更新到早期版本有什么问题?同意@Martinho,我看不出有什么意义。你为什么要这样做?也许有更好的解决办法。这很尴尬,但在两周的假期后,我不记得为什么我需要这样做。当时,我根据@Mark Tolonen的建议,从本地回购协议中克隆了一个,这就解决了我的问题。下次我要这么做的时候,我会回来解释我想做什么。我相信有更好的解决方案。也许你只是想
hg up 2038
,然后从那里开始工作。+1;虽然我认为Martinho的评论是这种情况下的“答案”(如果你想让变更集继续下去,为什么还要费心“取消提取”呢?),但重要的是要强调,从本地回购协议中克隆既有可能,又能在更短的时间内得到完全相同的结果。从本地克隆后,更新.hg/hgrc
中的[path]
以再次指向远程。从本地repo克隆确实要快得多。谢谢请注意,strip
只应用于未发布的变更集。也可以这样做:hg strip-r是可选的,可以删除多个版本。@schlamar,strip
不应用于主存储库上已发布的变更集,这是正确的。但是,如果您在自己的克隆上剥离
已发布的变更集,即使它们来自主repo,也没有问题,在您的下一个拉
上,它们将返回。