【发布时间】:2020-06-12 07:14:21
【问题描述】:
我是 git 新手,并试图了解合并冲突。我从 master 分支上的这个程序开始,在文件 helloworld.c 中:
#include <stdio.h>
int main () {
printf("Hello world!\n");
}
然后我创建一个名为 dev2 的新分支:
$ git checkout -b dev2
然后我编辑文件 helloworld.c 并引入一个错误来创建文件:
#include <stdio.h>
int main () {
printf("Hello world!\n")
}
然后我提交更改:
$ git commit -am "Bug"
然后我回到分支master:
$ git checkout master
我希望合并会产生冲突。取而代之的是,merge 命令只是愉快地将 bug 吸进了我的 master 分支:
$ git merge dev2
Updating 0379d43..b10cde3
Fast-forward
helloworld.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
该错误现在在 master 分支中:
$ git status
On branch master
Your branch is ahead of 'origin/master' by 17 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ cat helloworld.c
#include <stdio.h>
int main () {
printf("Hello world!\n")
}
在我看来,合并应该抱怨来自 dev2 分支的文件中的一行与来自 master 分支的同一文件中的那一行不同。为什么这种合并不会产生冲突?
【问题讨论】:
-
您认为对现有代码行的每一个更改都会是冲突?那将是完全无法控制的。 Git 不知道删除该分号是一个错误,它只是在处理文本。它正在完全按照您告诉它的方式进行 - 将更改从一个分支应用到另一个分支。
-
您提交了一个更改,该更改将
printf("Hello world!\n");更新为printf("Hello world!\n")。现在您将提交合并/应用到行为printf("Hello world!\n");的分支。当然它自然更新为printf("Hello world!\n")。为什么你会期待冲突?如果master行是其他内容,例如printf("Hello world!\n");;;,则会导致冲突。