Git合并订单的差异?

时间:2014-02-18 23:02:53

标签: git

之间有什么区别吗?
git merge c1 c2

git merge c2 c1

?另外,

之间有什么区别吗?
git checkout c1
git merge c2

git checkout c2
git merge c1

2 个答案:

答案 0 :(得分:12)

在您描述的所有情况下,文件内容的最终结果应该相同。

DAG 在所有提交图的提交顺序中会有所不同,例如:

案例1:git merge c1 c2

*   dd24250 (HEAD, master) Merge branches 'c1' and 'c2'
|\  
| * 9d09bec (c2) change in c2
* | 1f5c0ca (c1) change in c1
|/  

案例2:git merge c2 c1

*   3256c8d (HEAD, master) Merge branches 'c2' and 'c1'
|\  
| * 1f5c0ca (c1) change in c1
* | 9d09bec (c2) change in c2
|/  

案例3:git checkout c1; git merge c2

*   111e7da (HEAD, c1) Merge branch 'c2' into c1
|\  
| * 9d09bec (c2) change in c2
* | 1f5c0ca change in c1
|/  

案例4:git checkout c2; git merge c1

*   8ccf531 (HEAD, c2) Merge branch 'c1' into c2
|\  
| * 1f5c0ca (c1) change in c1
* | 9d09bec change in c2
|/  

答案 1 :(得分:1)

我从第二个问题开始。

合并提交中生成的树对象将是相同的。 但是,这两个提交对象不会是:

两个父提交对象的顺序将不同。 当引用具有HEAD^1~5符号的提交时,这可能会导致细微的差异。

同样适用于第一个问题:

第一种情况,第一次父亲=当前分支最后一次提交,第二次父亲= c1最后一次提交,第三次父亲= c2最后一次提交。

第二种情况,第一次父亲=当前分支最后一次提交,第二次父亲= c2最后一次提交,第三次父亲= c1最后一次提交。