为什么 git 将两个单独的已删除行标记为冲突?
Why is git marking two separate deleted lines as conflict?
我有一个包含以下内容的文件:
line 1
line 2
line 3
line 4
在分支 A
上提交。
据此,我创建了一个分支 B
并删除了提交中的第三行。
我签出分支 A
并删除另一个提交中的第二行。
当我在分支 A
中合并分支 B
时,我在该文件中遇到这样的冲突:
line 1
<<<<<<< HEAD
line 2
=======
line 3
>>>>>>> B
line 4
1) 如果没有修改同一行,为什么会发生冲突?
2) 为什么会这样显示而不是:
line 1
<<<<<<< HEAD
=======
>>>>>>> B
line 4
更清楚地表明那些行已被删除?
为了确保它不会破坏任何东西,任何体面的 diff 程序还会跟踪至少两行上下文:一行在 added/modified/deleted 行之上和之下。
当你删除分支B上的第3行时,实际上你修改了第2-4行的块。类似地,在分支 A 上,您修改第 1-3 行的块。
这两个块重叠,它们引入了不同的变化。 Git 无法确定如何合并这些更改,这就是将它们标记为冲突的原因。
B分支的文件内容为:
line 1
line 2
line 4
但是在当前分支(分支A)上是:
line 1
line 3
line 4
哪个是“正确”的版本?合并后你期望得到什么? Git 说不出来。 我说不出来。只有你自己知道。
如何读取Git报告的冲突区域:
line 1
<<<<<<< HEAD
line 2
=======
line 3
>>>>>>> B
line 4
用简单的英语来说,上面的块说:“在 line 1
和 line 4
之间,当前分支上有 line 2
,但分支 B 上有 line 3
”。
您建议的区块:
line 1
<<<<<<< HEAD
=======
>>>>>>> B
line 4
表示:在两个分支上,line 1
和line 4
之间没有任何内容。这不是真的。
你永远不会在 diff 中遇到这样的块。这基本上意味着文件的比较版本之间没有冲突。
我有一个包含以下内容的文件:
line 1
line 2
line 3
line 4
在分支 A
上提交。
据此,我创建了一个分支 B
并删除了提交中的第三行。
我签出分支 A
并删除另一个提交中的第二行。
当我在分支 A
中合并分支 B
时,我在该文件中遇到这样的冲突:
line 1
<<<<<<< HEAD
line 2
=======
line 3
>>>>>>> B
line 4
1) 如果没有修改同一行,为什么会发生冲突? 2) 为什么会这样显示而不是:
line 1
<<<<<<< HEAD
=======
>>>>>>> B
line 4
更清楚地表明那些行已被删除?
为了确保它不会破坏任何东西,任何体面的 diff 程序还会跟踪至少两行上下文:一行在 added/modified/deleted 行之上和之下。
当你删除分支B上的第3行时,实际上你修改了第2-4行的块。类似地,在分支 A 上,您修改第 1-3 行的块。
这两个块重叠,它们引入了不同的变化。 Git 无法确定如何合并这些更改,这就是将它们标记为冲突的原因。
B分支的文件内容为:
line 1
line 2
line 4
但是在当前分支(分支A)上是:
line 1
line 3
line 4
哪个是“正确”的版本?合并后你期望得到什么? Git 说不出来。 我说不出来。只有你自己知道。
如何读取Git报告的冲突区域:
line 1
<<<<<<< HEAD
line 2
=======
line 3
>>>>>>> B
line 4
用简单的英语来说,上面的块说:“在 line 1
和 line 4
之间,当前分支上有 line 2
,但分支 B 上有 line 3
”。
您建议的区块:
line 1
<<<<<<< HEAD
=======
>>>>>>> B
line 4
表示:在两个分支上,line 1
和line 4
之间没有任何内容。这不是真的。
你永远不会在 diff 中遇到这样的块。这基本上意味着文件的比较版本之间没有冲突。