Mercurial撤消三个hg推

时间:2012-02-10 18:55:04

标签: mercurial

我正在使用mercurial VCS,我错误地推了三次提交,我希望它们被撤消,这可以实现吗? 我很确定没有任何更改传播到我推送到的存储库中的任何人,所以我相信这不会破坏任何人的代码......

我已经尝试过hg rollback但是因为我已经推动了我无法以正确的方式撤消任何内容。我也知道hg退出,但我不确定我是否应该把它用于我需要的......

谢谢!

修改

这是图形日志,我忘了提到一些提交是合并的一部分,但它们也需要撤消...

tip
|
a
| \
|   b
| /
c
|
d

我需要将提示返回到c,或者如果由于合并而没有其他方法可以阻止它...

2 个答案:

答案 0 :(得分:6)

如果它已被推送,那么现在只能做两件事:

1)如果您能够删除中央存储库并将其替换为另一个存储库:
您可以克隆中央存储库,但告诉Mercurial to clone only up to changeset "c" 然后,您可以使用此存储库(没有错误的更改)并使用它替换“旧”中央存储库( 具有错误更改的存储库)。

缺点:如果某人已经提取了不需要的提交并稍后再次推送,则他们会再次进入存储库 所以你需要确保没有人犯错误,或者确保每个人都删除了他的克隆。

2)如果无法使用选项1,您可以使用hg backout撤消错误更改的效果 - 而不是更改集本身。
引用链接:

  

通过应用与要撤消的变更集相反的变更集来进行回退。新的变更集将提交到存储库,并最终合并。

因此,三个错误的变更集将保留在存储库中, plus 将添加另外三个变更集,每个变更集都会恢复三个错误变更集之一的影响。
如果你这样做,那么其他人是否已经做出了错误的改变并不重要......一旦他拉出三个“退出”的变更集,一切都还好。

答案 1 :(得分:2)

如果您肯定推送是该远程存储库发生的最后一件事,这意味着您和其他任何人都没有推送它,您可以登录该系统并运行hg rollback

如果它是您可以ssh的计算机上的存储库,则可以在本地系统上运行此命令:

ssh you@there hg -R /path/to/the/repo rollback

一如既往,请确保小心回滚。它在不改变工作目录的情况下撤消存储库上的最后一个操作,并且并不总是清楚最后一个操作是什么。例如,这是datalosss:

...hack...
hg commit -m 'important work'
hg update somewhere else
hg rollback

糟糕!

相关问题