我犯了一个大错误,需要一些帮助来撤销它。
我们有两个存储库 - 一个相当稳定的存储库,以及一个我们正在处理更改的存储库。我刚刚在我们的稳定存储库中进行了缺陷修复,并将其移至工作存储库。我从稳定存储库中拉取、 merge ,然后意外推送到稳定存储库。
稳定的存储库现在看起来像这样:
*merge
| \
| \
| *b
*a |
| /
*c
其中 a
是应该成为稳定存储库提示的提交,b
是我们在开发存储库中完成的所有内容, >c
是我们对开发存储库进行分支的点。
我该如何返回:
*a
|
*c
(我知道我无法真正让更改消失,我只是在寻找功能结构......)
我读过一些东西,让我认为 hg backout
是我需要的命令,但我不太确定它的作用。
最佳答案
hg rollback
恢复最后一个事务,因此您将留下未完成的 merge ,您必须使用 hg update -C
出去。
如果您不需要 *b(您在另一个克隆中拥有它),则启用内置 MQ 扩展并运行 hg strip -r <*b>
。它将摆脱 *b 和 *merge。默认情况下,它会保存备份,以防您再次改变主意。
更新(根据@Rudi的评论:抱歉我错过了“已推送”部分)
由于 merge 已经被推出,永远不要按照我之前的建议进行操作。来自其他开发者的仇恨电子邮件将是最好的结果。
这样做:
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>
关于mercurial - 撤消 hg 推送(取消?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3765208/