Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从特定Mercurial克隆中删除某些变更集?_Mercurial - Fatal编程技术网

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

如何从特定Mercurial克隆中删除某些变更集?,mercurial,Mercurial,我有一个版本为2048的中央回购的克隆。我想删除本地回购协议上的最后10个变更集,就像两周前我回到了时间一样。我想我可以删除我的本地回购协议并执行“hg clone-rev 2038”,但那会很长(克隆回购协议需要几分钟)。有没有办法“取消”一些变更集 注: 我不是在试图撤销变更集。我最终会再次从中央回购中提取这些变更集 我没有试图将工作目录更新为早期版本;我真的很想影响存储库 我当前的repo和工作目录中没有任何传出的变更集或挂起的修改 克隆本地回购协议应该很快。我想“几分钟”指的是远程回购

我有一个版本为2048的中央回购的克隆。我想删除本地回购协议上的最后10个变更集,就像两周前我回到了时间一样。我想我可以删除我的本地回购协议并执行
“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,也没有问题,在您的下一个
上,它们将返回。