https://segmentfault.com/q/1010000008244754
比如有两个分支,master
和develop
。针对1.txt
文件,
master分支
:
222
3333 66
555
develop分支
:
222
4444 77
888
先是有master,然后我创建了develop分支,然后再在develop分支下修改了1.txt,然后add和commit,然后切换回master分支,然后merge,就只报66和77冲突,别的两个地方不报冲突
为什么只有66和77那会产生冲突。而4444与3333,还有555和888不冲突呢?不明白
答:
是否出现 Conflicts(冲突),取决于 commit 修改先后顺序
楼上朋友提到了自动合并,也就是不会产生冲突的情况,举个例子:
master 上面,你有一个 commit,内容是 "1234"
这时候你在 master 基础上创建了新的 branch,叫 develop
,那么这个 develop
branch 上面也有内容为 "1234" 的那个commit
然后你提交了新的 commit,把 "1234" 变成了 "1234 666",那这个时候你 merge
,就不会有冲突
再举个例子,会产生冲突的情况:
master
里面有一个 commit,内容是 "1234"
你在这个 commit 之后创建了新的 branch,叫 develop
。那这个时候你的 develop
branch 里有第一个 commit,内容为 "1234"
然后你在 develop
里面,提交了一个 commit,内容是 "1234 777"
在这期间,你的 master
更新了,你的同事或者朋友,或者你自己,在 master
上提交了一个新的 commit,把它更新成了 "1234 666"
这时候你再 merge,就会有冲突了,因为 git 发现这两个 branch 有个共同的祖先(ancestor),也就是那个 "1234",但 git 并不知道你现在合并,到底是要 "666" 还是 "777"
回到你的问题,建议你先看下你两个 branch 的 commit 历史纪录,对比一下。看能不能找到类似这样的情况,也就是两个 branch 有一个共同的 commit 作为起始点(ancestor),但之后的 commit 出现了分歧(divert)
编者记:简言之,如果两个分支本身就存在一种继承关系,那么即便两者内容不一致,在merge的时候也不会出现冲突。