撤销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轻松实现