我确实提交了合并,之后我在主分支中退出以恢复上次合并。 一段时间后我需要合并分支,但mercurial说中止:与工作目录祖先合并没有效果
但是在开发分支中,我没有看到我对其他分支的更改。
答案 0 :(得分:0)
合并仅选取自上次合并以来新增的内容。例如:
default: *------------?
\ /
develop: o--o--o--o
每个o
代表一些提交。我们从默认分支(名为default
)开始,只有一个提交,标记为*
而不是o
。然后我们创建了一个develop
分支,从同一个第一次提交开始,并做了一些工作。
工作准备就绪后,我们返回default
分支并使用hg merge
。这提议进行新的提交,?
。它回顾了*
- 我们在default
和develop
之间的共同提交 - 并查看我们在两个分支上做了什么,并将它们组合在一起。
我们在default
上没有做任何事情,所以合并很容易。 Mercurial能够完成我们在develop
上所做的一切,并将其全部放入default
。让我们现在将合并作为真正的提交填写:
default: o------------*
\ /
develop: o--o--o--o
请注意,我已移动*
。它现在是新的合并。这是链接两个分支的最新提交。
同时,hg backout
进行一次撤消先前提交的新提交。特别是你要求退出合并。让我们画出:
default: o------------*--u
\ /
develop: o--o--o--o
无论如何,这个新提交有点像合并的反物质版本。 default
中的所有内容都会回归到合并之前的状态。所以我使用字母u
(对于"撤消")而不是通常的圆o
点来进行更典型的提交。
尽管如此,两个分支上的最新常见提交在哪里?答案应该是显而易见的:它仍然是*
。
现在请求Mercurial再次合并。它会在合并 - 之后找到develop
中的更改,并且没有。合并没有新工作!
假设我们再次查看develop
并进行一些新的提交:
default: o------------*--u
\ /
develop: o--o--o--o------o--o
现在我们可以再次hg merge develop
进入default
,以便从两个新提交中获取更改。但是,使用commit u
(退出提交) undid 的更改仍未完成。我们只会在develop
上提交 new (自合并以来)提交的更改,并且保持所做的更改(自合并以来) )在default
上,也就是说,u
撤消更改:
default: o------------o--u------*
\ / /
develop: o--o--o--o------o--o
如果您想要恢复所有这些更改,您可以简单地退出退出。也就是说,在develop
上添加新提交之前或之后的任何时间,甚至在合并这些新提交之前或之后,您都可以撤消撤消。让我们将u
倒置为" redo"如果我们在下次合并之前插入它,看看它看起来如何:
default: o------------o--u--n-----*
\ / /
develop: o--o--o--o--------o--o
换句话说,提交u
(hg backout
)取消了合并中的更改。它没有,也不能实际使合并不发生。因此要重新获取来自合并的更改,您必须撤消撤消,这是我们的n
。