Answers
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 10 years, 4 months ago