代码之家  ›  专栏  ›  技术社区  ›  Bob5421

文件在合并过程中被替换

git
  •  1
  • Bob5421  · 技术社区  · 6 年前

    看看这个序列:

    首先,我要克隆一个空存储库:

          git clone http://mygitlabserver/myuser/project1.git
          cd project1
    

    然后创建一个包含以下内容的主.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 branch。以下是我键入的内容:

    git checkout master
    git merge branch1
    

    我对冲突没有任何警告,这是我不明白的。 以下是主分支中的main.c文件的内容:

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        return 1;
    }
    

    所以我的主.c文件被branch1中的文件替换了。有时,我看到主.c文件中有这样的内容:

        #include <stdio.h>
    
        int main(int argc, char *argv[]) {
    ==============================
            return 0;
    ==============================
            return 1;
    ==============================
        }
    

    但在我的例子中并不是这样。我的问题是…为什么?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   zoska Hasindu Ramanayaka    6 年前

    没有冲突。两个分支都具有与上次提交“第一个版本”相同的历史记录,此提交是上一次提交 main 分支,这使得合并变得微不足道。合并 branch1 master 应用commit“version with return 1”的方式与在上创建时应用它的方式相同 鳃1 .

    如果您已经为例如commit“version with return 2”创建了 主要的 分支(变化明显 return 0 return 2 ,那么历史将发生分歧,差异将适用于文件的同一部分。这会导致冲突。