例如有兩個分支,master
和develop
。針對1.txt
文件,
master分支
:
222
3333 66
555
develop分支
:
222
44444 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"master
里面有一个 commit,内容是 "1234"
你在这个 commit 之后创建了新的 branch,叫 develop
。那这个时候你的 develop
,叫 develop
。那這個時候你的 develop
branch 裡有第一個 commit,內容是 "1234"develop
里面,提交了一个 commit,内容是 "1234 777"
在这期间,你的 master
更新了,你的同事或者朋友,或者你自己,在 master
然後你在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不在同一條線上了。