Heim > Fragen und Antworten > Hauptteil
比如有两个分支,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不冲突呢?不明白
看上图,在master分支是555555,在dev我改成了5445,然后add commit,然后切换回master分支,merge,没有冲突,最后合并为了5445,是不是你说的情况?
巴扎黑2017-05-02 09:49:39
是否出现 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 出现了分歧(pert)
如果还是不能解释你的问题,方便的话发一下你这个的 github 的地址
PHP中文网2017-05-02 09:49:39
试过发现不行,下面是原答案。
都是我猜的。
一开始master类似这样:
222
3333 22
555
然后你fork了一个develop,修改成这样:
222
4444 77
888
这个时候,develop是可以直接合并会master的,没冲突,因为develop在master后,是对master的修改。
但是你没合并develop,而是改了master:
222
3333 66
555
这时66和77那里就冲突了。因为git知道develop里的4444是从3333改的,888是从555改的,现在的master那个位置还是有3333和555。但是77本来是从22改的,但是现在master的22那里变成66,就有了两个冲突的修改,git就不能把77合并到66那里了。
或者说本来master和develop是一条线上的,但是你改了master,这个新的master就和原来的develop不在同一条线上了。