git - 为什么 git 不给我任何冲突?

标签 git git-merge-conflict

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

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

Hello Git..!

First Line

作为初始提交提交。

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

(abc) -> 分支

Hello Git..!

First Line
Second Line

promise 。然后我检查回我的 master 分支并将文件内容更改为以下内容。

(主)-> 分支

Hi Git..!

First Line

promise 。然后我尝试将“abc”分支 merge 到“master”分支。我以为它会给我带来冲突,但它已通过递归 成功 merge 到下面。

Hi Git..!

First Line
Second Line

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

Hello Git...!
First Line

那么说明有冲突。我不明白这个。有人请帮助我理解这一点。

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

我已将示例存储库上传到 GitHub。如果有人克隆它并尝试 merge ,它就可以被复制。

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

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

更新


因为大多数评论和回答都暗示不能有这样的冲突。我必须更新这个答案。

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

开始吧

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

作为初始提交提交。

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

(abc) -> 分支

Hello Git..!
First Line
Second Line

promise 。

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

(主)-> 分支

Hi Git..!
First Line

promise 。

  1. 然后我尝试将“abc”分支 merge 到“master”分支。这一次它会告诉我存在 merge 冲突

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

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

最佳答案

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

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

First Line

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

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

关于git - 为什么 git 不给我任何冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56152870/

相关文章:

git - 为什么flutter pub找不到我的github ssh-key?

git - 防止 git 子模块发生重大更改的工作流程

git - 如何从 git 存储库中排除 database.yml,同时仍然能够推送到 dotCloud?

merge-conflict-resolution - 如何让 KDiff3 在没有 UI 的情况下自动合并?

git - 如何将特定分支发布到azure应用程序服务?

git - 使用 Git 管理 WordPress 的本地、开发和实时版本

git - 如何删除 Git 冲突分支

git - 在我的第一次提交中,我无法推送更改,因为我的 github 中已经有 .gitignore 和 README.md,与本地不同

git - 为什么 vscode 中没有出现 merge 冲突装饰器?

git - git merge后如何处理xxx~HEAD?