之间有什么区别吗?
git merge c1 c2
和
git merge c2 c1
?另外,
之间有什么区别吗?git checkout c1
git merge c2
和
git checkout c2
git merge c1
答案 0 :(得分:12)
在您描述的所有情况下,文件内容的最终结果应该相同。
但 DAG 在所有提交图的提交顺序中会有所不同,例如:
git merge c1 c2
* dd24250 (HEAD, master) Merge branches 'c1' and 'c2'
|\
| * 9d09bec (c2) change in c2
* | 1f5c0ca (c1) change in c1
|/
git merge c2 c1
* 3256c8d (HEAD, master) Merge branches 'c2' and 'c1'
|\
| * 1f5c0ca (c1) change in c1
* | 9d09bec (c2) change in c2
|/
git checkout c1; git merge c2
* 111e7da (HEAD, c1) Merge branch 'c2' into c1
|\
| * 9d09bec (c2) change in c2
* | 1f5c0ca change in c1
|/
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最后一次提交。