git merge合并


现有主干 A,分支 B;执行


 git checkout A
git merge B

在这里有个问题:在 B 中删除了一些文件(这些文件 A 中是存在的),执行合并后,A 中相应的文件会不会删除,B 中增加的文件在 A 中又是怎样表现的?因为我合并后,进行编译报错,在 B 中编译没报错的,是不是合并后更改了某些文件?

编程 Android git github Linux

你看不见我哦 9 years, 10 months ago

git merge 既不是取交集,也不是取并集,而是 文件更改历史重放所有的修改

比如这样的分支结构:


 A---B---C topic
     /
D---E---F---G master

然后执行:


 git checkout master
git merge topic

那么 merge 的时候就是做了以下事情:

  • 首先找到它们共同的 commit E
  • 开始在 master 分支上从 A 到 C 重放所有修改

如果 A 到 C 的过程中修改了 F 到 G 里面任何一个文件,那么就很可能会冲突,除非它们对同一个文件的修改完全一样。

回到题主的问题。如果 B 删除了文件 foo,而 A 里面并没有任何提交跟 foo 相关,那么 foo 就会被删除;如果 A 里面修改了 foo,那么合并就会冲突,git 仓库会进入 MERGE 状态。你可以通过 git status 来看到具体状态是怎样。

参考: https://www.kernel.org/pub/software/scm/git/docs/git-merge.html

咸腌蛋的超人 answered 9 years, 10 months ago

Your Answer