现有主干 A,分支 B;执行
git checkout A
git merge B
在这里有个问题:在 B 中删除了一些文件(这些文件 A 中是存在的),执行合并后,A 中相应的文件会不会删除,B 中增加的文件在 A 中又是怎样表现的?因为我合并后,进行编译报错,在 B 中编译没报错的,是不是合并后更改了某些文件?
现有主干 A,分支 B;执行
git checkout A
git merge B
在这里有个问题:在 B 中删除了一些文件(这些文件 A 中是存在的),执行合并后,A 中相应的文件会不会删除,B 中增加的文件在 A 中又是怎样表现的?因为我合并后,进行编译报错,在 B 中编译没报错的,是不是合并后更改了某些文件?
首先, 你要确认你的merge成功了. 在两个branch下面对同一个文件进行了变更. 会产生冲突.
即conflict.会导致automerge失败. 这时候你要进行手动修改.
git status 查看有没有冲突的文件 如果有的话,打开文件你会看到冲突的点会有.
>>>>>>A
A的内容
======
B的内容
<<<<<< B
这样的的格式的东西. 修改成你想要的内容.就是把A的内容删除. 然后保存. git commit来完成merge.
7 回答5.6k 阅读
4 回答4.2k 阅读
5 回答3.1k 阅读
3 回答2.8k 阅读
2 回答964 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
2 回答3.5k 阅读
git merge
既不是取交集,也不是取并集,而是文件更改历史重放所有的修改。比如这样的分支结构:
然后执行:
那么 merge 的时候就是做了以下事情:
E
如果 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