首页 > 解决方案 > 为什么 git 不给我任何冲突?

问题描述

我发现了一个奇怪的问题。我正在测试一个 git repo 并在这种情况下发现。

我创建了一个简单的 git repo 并添加了一个包含以下内容的文本文件。

Hello Git..!

First Line

作为初始提交提交。

然后我从该提交创建了一个名为“abc”的分支,并将文件的内容更改为下面。

(abc) -> 分支

Hello Git..!

First Line
Second Line

坚定的。然后我检查回我的主分支并将文件内容更改为下面。

(主)-> 分支

Hi Git..!

First Line

坚定的。然后我尝试将“abc”分支合并到“master”分支。我认为这会给我带来冲突,但它已经通过递归成功地合并到下面。

Hi Git..!

First Line
Second Line

什么没有显示出任何冲突?如果像下面这样之间没有空行,我有时会尝试多次尝试,

Hello Git...!
First Line

然后它表明存在冲突。我无法理解这一点。有人请帮助我理解这一点。

我尽可能多地搜索,但找不到问题或答案来解决我的问题。

我已将示例 repo 上传到 GitHub。如果有人克隆它并尝试合并,它可以被复制。

https://github.com/Ranjith-Suranga/test-repo

有什么办法可以强制 GIT 显示冲突?我知道这是一个奇怪的问题,没有人需要产生冲突。但我也不喜欢这种情况发生。想象一下,这发生在我的真实代码上。

更新


由于大多数评论和答案都表明不能有这样的冲突。我不得不更新这个答案。

好的,在删除第二个空行之后,让我们再次执行上述所有步骤。

开始了,

  1. 我创建了一个简单的 git repo 并添加了一个包含以下内容的文本文件。这一次,第一行和第二行之间没有空行。
Hello Git..!
First Line

作为初始提交提交。

  1. 然后我从该提交创建了另一个名为“abc”的分支,并将文件的内容更改为下面。(再次删除空行)

(abc) -> 分支

Hello Git..!
First Line
Second Line

坚定的。

  1. 然后我检查回我的主分支并将文件内容更改为下面。

(主)-> 分支

Hi Git..!
First Line

坚定的。

  1. 然后我尝试将“abc”分支合并到“master”分支。这一次它会说我有一个合并冲突

如果你不相信我,这里是示例 github repo https://github.com/Ranjith-Suranga/test-repo2

第一个没有任何冲突,第二个几乎相同,除了删除的空行,它给出了冲突。但问题是为什么?

标签: gitgit-merge-conflict

解决方案


请注意,文件的所有版本都包含不完整的最后一行。当您添加另一行时,这意味着您不仅添加了一行,而且还删除了不完整的行,然后添加了两行。

在您的第二次尝试中,当您合并两个分支时,Git 会检测到相邻文本块中的更改。与您的想法相反,行阅读

First Line

实际上并没有保持不变,因为在一个分支中添加的最后一个换行符算作对该行的修改。由于您在来自不同分支的相邻行中进行了修改,因此 Git 报告了合并冲突。

在您的第一次尝试中,在 read 行上方有一个空行First Line。可以说,这条线充当了在合并期间保持稳定的锚点。它允许 Git 清楚地将来自不同分支的更改分成不同的文本块。因此,Git 可以自动合并修改,而不会发生冲突。


推荐阅读