如何在退出Mercurial后合并

时间:2016-07-14 09:04:21

标签: version-control mercurial

我确实提交了合并,之后我在主分支中退出以恢复上次合并。 一段时间后我需要合并分支,但mercurial说中止:与工作目录祖先合并没有效果

但是在开发分支中,我没有看到我对其他分支的更改。

1 个答案:

答案 0 :(得分:0)

合并仅选取自上次合并以来新增的内容。例如:

default:   *------------?
            \          /
develop:     o--o--o--o

每个o代表一些提交。我们从默认分支(名为default)开始,只有一个提交,标记为*而不是o。然后我们创建了一个develop分支,从同一个第一次提交开始,并做了一些工作。

工作准备就绪后,我们返回default分支并使用hg merge。这提议进行新的提交,?。它回顾了* - 我们在defaultdevelop之间的共同提交 - 并查看我们在两个分支上做了什么,并将它们组合在一起。

我们在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

换句话说,提交uhg backout)取消了合并中的更改。它没有,也不能实际使合并不发生。因此要重新获取来自合并的更改,您必须撤消撤消,这是我们的n