比方说,我们有两个分支(B和C)已经从一个共同的祖先分道扬镳一个 。 将合并从B到C产生相同的结果作为由C合并到B?
A
|
/ \
B C
为了clarify-我假设任何手动合并冲突的决议将出现在两个方向上。 但是,将被选择的发生产生相同的代码任何自动合并? 这就是我假设,因为提交日期是在两个方向上是相同的。
为了进一步澄清 - 我知道,在彼此的“镜像”的实际合并结果基于方向。 我只是问的自动解决冲突。
比方说,我们有两个分支(B和C)已经从一个共同的祖先分道扬镳一个 。 将合并从B到C产生相同的结果作为由C合并到B?
A
|
/ \
B C
为了clarify-我假设任何手动合并冲突的决议将出现在两个方向上。 但是,将被选择的发生产生相同的代码任何自动合并? 这就是我假设,因为提交日期是在两个方向上是相同的。
为了进一步澄清 - 我知道,在彼此的“镜像”的实际合并结果基于方向。 我只是问的自动解决冲突。
答案是肯定的默认合并。 一个三路合并找到一个共同的祖先,然后应用从双方未依赖于顺序操作的差异。 合并排序和交换性的话题产生的一个精彩讨论git的列表 (如果你进入的是这样的事情,那是)。 注意B into C
和C into B
应该是对称的,但同样可以不一定用于说(B into C) into A
与B into (C into A)
更详细地说明了一点,基于以下文斯的评论和对问题的SEH的评论,会有之间有两个显着的不同B into C
和C into B
,这两者都不影响问题所引用的自动合并决议。
首先,历史会有所不同。 这次合并提交的父母将根据合并顺序改变。 在这些例子中,我将使用“first_branch”和“second_branch”,这样我就可以保留字母来代表提交。
git checkout first_branch && git merge second_branch
E <- merge commit
|\
| D <- second_branch's tip
| |
| C <- another commit on second_branch
| |
| B <- and another
|/
A <- first_branch's tip before the merge
在这种情况下,“第一父” E的, E^1
,是在合并之前first_branch的小费。 second_branch是合并的“第二个亲本”提交,又名E^2
。 现在考虑相反的:
git checkout second_branch && git merge first_branch
E <- merge commit
|\
| D <- first_branch's tip
| |
| C <- another commit on first_branch
| |
| B <- and another
|/
A <- second_branch's tip before the merge
父母是相反的。 E^1
是second_branch的合并之前的一角。 E^2
是first_branch的尖端。
第二,冲突的显示顺序将反转。 在第一种情况下,冲突可能是这样的:
<<<<<<< HEAD
This line was added from the first_branch branch.
=======
This line was added from the second_branch branch.
>>>>>>> second_branch
在第二种情况下,同样的冲突是这样的:
<<<<<<< HEAD
This line was added from the second_branch branch.
=======
This line was added from the first_branch branch.
>>>>>>> first_branch
这些都不差异会影响自动合并的决议,但它们当你反向三方合并为了不出现。
这取决于你的意思是“相同的结果”是什么。 从内容的角度来看,假设有要么没有冲突,或现有的所有冲突都以完全相同的方式,所产生的新的合并的内容提交应该是相同的精心解决。
然而,从历史拓扑角度看,两者有很大的不同。 如果你是在分支B和用C合并,B的头移动到指向合并提交,但是C停留在哪里。 相反,如果你是基于C和B,C的头移动合并,而B的停留在哪里。 所以最终的拓扑结构是非常不同的,这对于在任一分支未来发展的影响,即使新的内容提交是在两种情况下是相同的。
不,我认为它不会是对称的。 首先,你可以设置合并策略的选择,特别是在你的情况下, theirs
还是ours
决定,如果B或C将被选择。
在自动合并,我认为,例如远程分支拥有更改优先级,如果你正在合并成你这样就意味着调用git merge C
的B将导致C钮被选择。 我不是100%肯定的,所以你可以试试你的自我,让我们知道。