撤消hg推送(退出?)

Nei*_*eil 41 merge mercurial tortoisehg

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

我们有两个存储库 - 一个相当稳定的存储库,以及我们正在进行更改的存储库.我只是在我们的稳定存储库中进行了一个缺陷修复,并将其移动到工作存储库.我从稳定的存储库中取出,合并,然后意外地推送到稳定的存储库.

稳定的存储库现在看起来像这样:

*merge
| \
|  \
|   *b
*a  |
|  / 
*c
Run Code Online (Sandbox Code Playgroud)

a应该是稳定存储库的提示的提交在哪里,b是我们在开发存储库中完成的所有工作,并且c我们分支开发存储库.

我该如何回归:

*a
|
*c
Run Code Online (Sandbox Code Playgroud)

(我知道我无法真正做出改变,我只是在寻找功能结构......)

我读过一些让我觉得这hg backout是我需要的命令的东西,但我不确定它是做什么的.

Geo*_*eng 49

hg rollback恢复最后一笔交易,所以你将留下未完成的合并,你必须用它hg update -C来离开.

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


更新(根据@Rudi的评论:对不起,我错过了"已推出"部分)

由于合并已经推出,从来没有做过我之前建议的事情.来自其他开发者的讨厌电子邮件将是最好的结果.

改为:

hg up -r<*merge>
hg revert -r<*a> -a
hg ci -m "undo unintended merge"
Run Code Online (Sandbox Code Playgroud)

或者你可以更犹豫:

hg up -r<*merge>
hg backout -r<*merge> --parent<*a>
Run Code Online (Sandbox Code Playgroud)

  • `backout`在您现有的变更集之上提交一个新的变更集,以有效地扭转变更.`revert`改变你的工作副本而不提交. (2认同)
  • FYI`hg backout --parent`现已弃用(` - parent`部分) (2认同)