假设我在主分支(master)上有一个提交(commit),文件名为test.txt
,文件中只有一行代码Hello world!
并以换行符结尾(这样可以防止在添加第二行时第一行出现差异)。
接着,我从这个提交(commit)创建了一个名为modification
的分支(branch)。在这个分支(branch)上,我对文件进行了修改:
Hello world!
为了
Hello world!
This is another line.
然后我提交到该分支。
然后我检出主分支并更改文件从
Hello world!
为了
Hello world! This is a new thing.
然后我提交到master
上。总结来说,在这两个提交中,我只改变了一行。由于我在master
开头有一个换行符,在master
上的额外提交仅修改第1行,而在modification
上的提交仅修改第2行。因此,当我尝试将modification
合并到主分支master
时,我不明白为什么会出现合并冲突。然而,我得到了diff3
输出结果。
<<<<<<< HEAD
Hello world! This is a new thing.
||||||| merged common ancestors
Hello world!
=======
Hello world!
This is another line.
>>>>>>> modification
为什么 Git 无法意识到修改的是不同的行,并将这两个修改合并在一起?我认为它应该将来自
master
分支的第一行修改和来自 modification
分支的第二行修改合并起来形成以下结果:Hello world! This is a new thing.
This is another line.
我能想到的唯一可能性是,无论行号如何修改同一个代码块。有趣的是,如果我在第三行而不是第二行添加“这是另一行”,并保持分支上的空行,则合并将继续进行而不会产生冲突。