看看这个序列:
首先,我正在克隆一个空的存储库:
git clone http://mygitlabserver/myuser/project1.git
cd project1
然后我用这个内容创建一个main.c文件:
#include <stdio.h>
int main(int argc, char *argv[]) {
return 0;
}
我添加并提交了我的程序的第一个版本:
git add main.c
git commit -m "first version"
然后,我创建一个分支,然后切换到这个分支:
git branch branch1
git checkout branch1
在这个分支中,我对main.c文件进行了更改:
#include <stdio.h>
int main(int argc, char *argv[]) {
return 1;
}
如您所见,这是一个非常基本的变化(0到1)。
我在branch1上添加并提交此更改:
git add main.c
git commit -m "version with return 1"
现在,我想将branch1合并到master分支。这是我输入的内容:
git checkout master
git merge branch1
我没有关于冲突的警告,这是我不明白的。 以下是master分支中main.c文件的内容:
#include <stdio.h>
int main(int argc, char *argv[]) {
return 1;
}
所以我的main.c文件被branch1中的文件替换了。有时,我看到我的main.c文件有这样的东西:
#include <stdio.h>
int main(int argc, char *argv[]) {
==============================
return 0;
==============================
return 1;
==============================
}
但在我的例子中并非如此。我的问题是......为什么?
由于
答案 0 :(得分:1)
没有冲突。两个分支与上次提交“第一个版本”具有相同的历史记录,并且此提交是main
分支上的最后一个,这使得合并变得微不足道。将branch1
合并到master
会将提交“返回1的版本”应用于您在branch1
上创建它时应用它的方式。
如果你已经创建了例如在main
分支上提交“带有返回2的版本”(显然将return 0
更改为return 2
),然后历史将发生分歧并且差异将适用于文件的同一部分。这会导致冲突。