Version control 将存储库回滚到特定修订

Version control 将存储库回滚到特定修订,version-control,mercurial,Version Control,Mercurial,我的存储库有问题。我从另一个存储库中提取了一个变更集列表,运行了更新并合并了。。。合并没有按预期工作,现在我需要回滚到,然后再拉更改集,以便再次拉更改集 如何将多个变更集回滚到一个特定版本中?如果在此上下文中回滚的意思是将变更集删除,就好像从未提取过一样,那么您可以使用MQ扩展的strip函数部分 首先通过编辑.hgrc*nix或mercurial.ini Windows文件启用MQ扩展: [extensions] mq= 警告:这将删除具有给定修订哈希的变更集,以及由此产生的任何变更集。如果您

我的存储库有问题。我从另一个存储库中提取了一个变更集列表,运行了更新并合并了。。。合并没有按预期工作,现在我需要回滚到,然后再拉更改集,以便再次拉更改集


如何将多个变更集回滚到一个特定版本中?

如果在此上下文中回滚的意思是将变更集删除,就好像从未提取过一样,那么您可以使用MQ扩展的strip函数部分

首先通过编辑.hgrc*nix或mercurial.ini Windows文件启用MQ扩展:

[extensions] mq= 警告:这将删除具有给定修订哈希的变更集,以及由此产生的任何变更集。如果您不确定要完成什么或如何使用该命令,请在尝试之前克隆存储库,这样您就可以安全地进行实验


还请注意,如果您已经将合并推到其他地方,那么您还需要在该存储库中进行清理,并且根据合并是否处于野生状态,可能无法永久删除它。

如果在此上下文中通过回滚,您的意思是删除更改集,就好像从未执行过拉取操作一样,然后可以使用MQ扩展的strip函数部分

首先通过编辑.hgrc*nix或mercurial.ini Windows文件启用MQ扩展:

[extensions] mq= 警告:这将删除具有给定修订哈希的变更集,以及由此产生的任何变更集。如果您不确定要完成什么或如何使用该命令,请在尝试之前克隆存储库,这样您就可以安全地进行实验


还请注意,如果您已经将合并推到了其他地方,那么您还需要在该存储库中进行清理,并且根据合并是否处于野生状态,可能无法永久删除它。

我没有真正使用mercurial,只是真正使用CVS和SVN,但应该是相同的。我想你可以根据修订号或日期签出旧版本,对吗?如果是这样,请在临时目录中签出旧版本并重新合并。不过,您还需要删除存储库中添加的任何新文件。这样,您就可以有效地拥有与2个或更多版本之前相同的文件副本


这将具有与回滚相同的效果,尽管它将是一个更高的修订号。相同的内容,只是更新的版本。我认为这是最安全的方法,因为没有办法失去任何东西。

我没有真正使用mercurial,只使用CVS和SVN,但应该是一样的。我想你可以根据修订号或日期签出旧版本,对吗?如果是这样,请在临时目录中签出旧版本并重新合并。不过,您还需要删除存储库中添加的任何新文件。这样,您就可以有效地拥有与2个或更多版本之前相同的文件副本


这将具有与回滚相同的效果,尽管它将是一个更高的修订号。相同的内容,只是更新的版本。我认为这是最安全的方法,因为没有办法失去任何东西。

如果您想返回到特定版本并放弃所有本地更改,只需更新到该版本并传递清除标志:

hg up -C -R 7

例如,此行将放弃未提交的更改,并恢复到版本7。

如果要返回到特定版本并放弃所有本地更改,只需更新到该版本并传递清除标志:

hg up -C -R 7
例如,此行将放弃未提交的更改,并恢复到修订版7。

回滚不是您要描述的内容。如果在撤销之前,您的回购协议是这样的:

[A]-[B]-[C]-[D]
[A]-[B]-[C]-[D]-----[G]
          \        /
           -[E]-[F]
cd ..
hg clone -r tip-1 myrepo mynewrepo
拉动之后,它看起来像:

[A]-[B]-[C]-[D]
          \
           -[E]-[F]
合并后的情况如下:

[A]-[B]-[C]-[D]
[A]-[B]-[C]-[D]-----[G]
          \        /
           -[E]-[F]
cd ..
hg clone -r tip-1 myrepo mynewrepo
然后你不想撤消拉-你仍然想要变更集E和F-你只想在合并中再试一次,G

有几种方法可以做到这一点。要做到这一点,最灵活的方法就是:

hg update D
hg merge E
... re-merge, doing it better this time ...
hg commit # creates H
然后,您的历史将如下所示:

[A]-[B]-[C]-[D]-------- [G]
          \          X
           -[E]-[F]-----[H]
其中X是一个交叉点。然后用H作为新的开发点,忽略或关闭G

第二个最好的方法是删除G,然后重新进行合并。官方方法是在本地克隆存储库,获得除G以外的所有内容,如下所示:

[A]-[B]-[C]-[D]
[A]-[B]-[C]-[D]-----[G]
          \        /
           -[E]-[F]
cd ..
hg clone -r tip-1 myrepo mynewrepo
在这里,除了G之外,所有的东西都在mynewrepo中。然后你可以重新合并。strip命令也可以工作,但由于某种原因被禁用

底线是你不需要移除和重做拉;只是合并。

回滚不是您所描述的。如果在撤销之前,您的回购协议是这样的:

[A]-[B]-[C]-[D]
[A]-[B]-[C]-[D]-----[G]
          \        /
           -[E]-[F]
cd ..
hg clone -r tip-1 myrepo mynewrepo
拉动之后,它看起来像:

[A]-[B]-[C]-[D]
          \
           -[E]-[F]
合并后的情况如下:

[A]-[B]-[C]-[D]
[A]-[B]-[C]-[D]-----[G]
          \        /
           -[E]-[F]
cd ..
hg clone -r tip-1 myrepo mynewrepo
然后你不想撤消拉-你仍然想要变更集E和F-你只想在合并中再试一次,G

有一个 有几种方法可以做到这一点。要做到这一点,最灵活的方法就是:

hg update D
hg merge E
... re-merge, doing it better this time ...
hg commit # creates H
然后,您的历史将如下所示:

[A]-[B]-[C]-[D]-------- [G]
          \          X
           -[E]-[F]-----[H]
其中X是一个交叉点。然后用H作为新的开发点,忽略或关闭G

第二个最好的方法是删除G,然后重新进行合并。官方方法是在本地克隆存储库,获得除G以外的所有内容,如下所示:

[A]-[B]-[C]-[D]
[A]-[B]-[C]-[D]-----[G]
          \        /
           -[E]-[F]
cd ..
hg clone -r tip-1 myrepo mynewrepo
在这里,除了G之外,所有的东西都在mynewrepo中。然后你可以重新合并。strip命令也可以工作,但由于某种原因被禁用


底线是你不需要移除和重做拉;只是合并。

这只会影响工作目录,但PedroC88询问如何从回购协议中完全删除内容。问题是,我无法收回变更集,因为对于mercurial,已经提取的变更集只会影响工作目录,但PedroC88正在询问如何从回购协议中完全删除这些内容。问题是我无法收回变更集,因为对于mercurial来说,已经收回了变更集