合并方向在Mercurial中重要吗?
举一个简单的例子:我正在处理默认分支,在本地提交了一些变更集,并且从主存储库中提取了一些变更集。我已经在独立的本地存储库中工作了几天,所以在将结果推回到master之前,有很多更改需要合并合并方向在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: 这两个结果在我看来是同构的,
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