撤销hg推(退出?)

我做了一个很大的哎呀,可以用一些帮助撤消它。

我们有两个存储库 – 一个相当稳定的存储库,以及一个我们正在处理的存储库。我只是在稳定的存储库中做了一个缺陷修复,并将其移动到工作存储库。 我从稳定的仓库中取出,合并,然后意外地推到稳定的仓库。

稳定版本库现在看起来像这样:

*merge | \ | \ | *b *a | | / *c 

其中a是应该成为稳定版本库的提示,b是我们在开发库中所做的所有工作,c是我们分支开发库的一点。

我该如何回到:

 *a | *c 

(我知道我不能让变化消失,我只是在寻找一个function性的结构……)

我读过一些让我觉得hg退出是我需要的命令的事情,但是我不确定它的作用。

hg rollback会恢复最后一个事务,所以你会留下未完成的合并,你必须使用hg update -C来退出。

如果您不想要* b(您在另一个克隆中有),请启用内置MQ扩展并运行hg strip -r <*b> 。 它将摆脱* b和*合并。 默认情况下,它会保存备份,以防再次改变主意。


更新(每@鲁迪的评论:对不起,我错过了“已推”部分)

由于合并已经推出, 永远不要做我以前的build议。 讨厌同行开发者的电子邮件会是最好的结果。

做这个,而不是:

 hg up -r<*merge> hg revert -r<*a> -a hg ci -m "undo unintended merge" 

或者你可以更犹太人:

 hg up -r<*merge> hg backout -r<*merge> --parent<*a> 

由于您已经推送了您的更改,因此我认为迟到会造成hg rollback

您可以尝试使用MQ扩展,但是这也适用于本地。 hg strip只会修改您的本地回购。 你当然可以尝试直接在服务器上修改你的服务器repo,但是如果有人拉它,那就太晚了。

另一个选项在hgbook的第9章的“ 退出合并”一节中进行了介绍 。 它涉及到hg backout命令,但它可能是一个矫枉过正的你…

我build议hg update -C到*修订版本,合并提示并忽略来自*合并的所有更改? 您的存储库看起来或多或less会比这样:

 *second merge | \ | \ | \ | \ *merge | | \ | | \ | | *b | *a | / | / / *c--- 

这是命令

  • $ hg --config ui.merge=internal:local merge #keep my files
  • $ hg --config ui.merge=internal:other merge #keep their files

更多细节可以在这里find

hg rollback将恢复最后一次提交,删除否则将作出的任何历史logging。

所以,如果你从这开始:

 *merge | \ | \ | *b *a | | / *c 

hg回滚会给出:

 *a *b | / *c 

请注意,您只能执行一次hg rollback

在回滚之前,您应该对存储库进行完整备份。 要做到这一点,只需要hg clone整个存储库。

对于这个问题,你们都没有什么复杂的解决办法,这对我们任何人都是可能发生的。

我所做的,我login远程桌面到我的中央存储库,并与mq扩展名修改状态改为“草稿”和“约” – 他们。

唯一的缺点是,如果有人的副本具有剥离的修订版,并将推动,他们将重新出现。 所以,如果可以的话,要求其他人a)做同样的事情(草案,剥离)b)删除他们的本地仓库,并与修改的同步

所有这一切都可以用TortoiseHg轻松实现