git merge覆盖内容

时间:2019-03-13 19:32:46

标签: git git-merge

这是我的情况:

  • 我有两个要素分支A和B。

  • 我想结合这两个分支。

我做了以下事情:

  • 创建一个从A分支的新分支C

  • 签出新分支C

  • 从命令行运行git merge B

我希望两个分支合并。如果对同一文件的更改有冲突,则该命令应引发合并冲突。

但是实际上,在分支A和B中存在一个具有不同内容的同一个文件,但是没有报告合并冲突。而是,分支A中文件的内容被分支B中文件的内容覆盖。

我不知道为什么没有报告合并冲突,更担心为什么文件的内容被覆盖。

任何提示或指针都会有所帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

让我们列出发生的事情。

  
      
  • 我有两个要素分支A和B。
  •   

通常是这样的。

           4 - 5 [A]
          /
 1 - 2 - 3 - 6 [master]
              \
               7 - 8 [B]

A和B从master分支出来。他们分歧了。

但是你可能有这个。

                 6 - 7 [B]
                /
           4 - 5 [A]
          /
 1 - 2 - 3 - 6 [master]

这里B从A分支出来。B共享A的所有提交。让我们假设。

  
      
  • 创建一个新的分支C,从A分支出来
  •   

在Git中创建新分支只会在与A相同的提交时创建一个新标签。

                 6 - 7 [B]
                /
           4 - 5 [A][C]
          /
 1 - 2 - 3 - 6 [master]
  
      
  • 签出新分支C
  •   
  • 从命令行运行git merge B
  •   

发生这种情况时,Git注意到C是B的祖先。因此它执行“快进”,这意味着它不会为合并而烦恼,它只是将C推进到B所在的位置。

                 6 - 7 [B][C]
                /
           4 - 5 [A]
          /
 1 - 2 - 3 - 6 [master]

如果A和B更改了相同的文件,则似乎B覆盖了A中的更改。

git log和Github不幸地弄平了您的Git历史记录,给您一个错误的印象,即它是线性的。您可以使用git log --graph --decorate --all查看存储库的真实结构,并在此处检查其是否符合方案。