合并方向在Mercurial中重要吗?

合并方向在Mercurial中重要吗?,mercurial,merge,dvcs,Mercurial,Merge,Dvcs,举一个简单的例子:我正在处理默认分支,在本地提交了一些变更集,并且从主存储库中提取了一些变更集。我已经在独立的本地存储库中工作了几天,所以在将结果推回到master之前,有很多更改需要合并 default ---o-o-o-o-o-o-o-o-o-o-o (pulled stuff) \ o----o------------o (my stuff) 我现在可以做两件事 选项1: 结果#1: 选项2: 结果#2: 这两个结果在我看来是同构的,

举一个简单的例子:我正在处理默认分支,在本地提交了一些变更集,并且从主存储库中提取了一些变更集。我已经在独立的本地存储库中工作了几天,所以在将结果推回到master之前,有很多更改需要合并

default ---o-o-o-o-o-o-o-o-o-o-o  (pulled stuff)
            \
             o----o------------o  (my stuff)
我现在可以做两件事

选项1:

结果#1:

选项2:

结果#2:

这两个结果在我看来是同构的,但在实践中,选项#2似乎会产生更小的变更集(因为它只将我的少数变更应用于主线,而不是将所有主线变更应用于我的少数变更)

我的问题是:这有关系吗?我是否应该关心合并的方向?如果我这样做会节省空间吗?(合并后执行
hg log--patch--rev tip
建议如此。)

它们(实际上)是相同的。您可以在
hg log--patch--rev X
输出大小中看到差异,因为log显示结果的差异和(任意)它的“左”父级(正式为p1),但这不是它的存储方式(Mercurial有一个二进制差异存储格式,它不是基于补丁/差异的),现在是它的计算方式(p1、p2和最近的共同祖先都被使用)


唯一真正的区别是,如果您使用命名分支,则分支名称将是左父级的名称。

如果您使用书签,也会有区别。在进行合并时,您所在的分支就是接收更改的分支,因此新的更改集将是该分支的一部分。如果您遇到这种情况:

default ---o-o-o-o-o-o-o-o-o-o-o   -- Head: Rev 200
            \
             o----o------------o   -- Head: Rev 195, Bookmark: my-stuff
如果将Rev 200合并到Rev 195,则书签
my stuff
将移到Rev 201,因为您将在具有书签的同一分支中生成新的变更集


另一方面,如果您将195合并为200,您将在没有书签的分支中生成一个变更集。
my stuff
书签将保留在Rev 195中。

如果您正在使用,这一点尤其重要,因为这会跟踪使用书签的虚拟Git分支的位置。如果您以错误的方式合并,Gitbranch bookmark不会移动,您将无需推动。将200合并到195不能保证将书签向前移动到201。如果您执行
hg update my stuff;hg merge 200
则会移动,但如果执行
hg update 195;hg merge 200
则不会移动。按书签名称更新将使其处于活动状态。
default ---o-o-o-o-o-o-o-o-o-o-o
            \                   \
             o----o------------o-O
hg pull
hg update
hg merge
default ---o-o-o-o-o-o-o-o-o-o-o-O
            \                   /
             o----o------------o
default ---o-o-o-o-o-o-o-o-o-o-o   -- Head: Rev 200
            \
             o----o------------o   -- Head: Rev 195, Bookmark: my-stuff