有人可以解释这个有趣的git合并行为

时间:2011-05-27 03:42:48

标签: git git-merge

我有两个分支,

A-C (master)
 \
  B-D (clean)

A..C中,我添加了一个包含大量文件的目录。在A..B中,我添加了完全相同的目录和文件,因此git diff C..B在此目录中未显示任何更改。在B..D中,我对这些文件进行了更改。我想将这些更改合并到master。我尝试了两种不同的方法,一种方法干净利落,另一种方法非常糟糕:

git merge clean

上述命令实际上会产生大量冲突,每个文件都会发生冲突。

git merge clean^
git merge clean

以上工作完美,递归合并,完全没有冲突。

上述情况如何以及为何发生? git可以不看历史,并确定它是一个早期的分裂?或者这太可能会被用作合并策略?

1 个答案:

答案 0 :(得分:3)

在第一种情况下,git merge clean,Git没有基于合并的冲突文件的共同祖先,所以看起来你正在尝试将两个都创建了相同文件名的树组合在一起但是内容不同。 (共同的祖先A没有任何冲突的文件。)

在第二种情况下,git merge clean^ && git merge clean,第一次合并再次看不到共同的祖先,但能够平凡地解决它,因为文件是相同的。然后第二次合并可以采用现在已知的祖先,并且只应用差异。