搜尋

首頁  >  問答  >  主體

git中的不同分支下的同一文件,到底怎麼樣才能算是衝突?

例如有兩個分支,masterdevelop。針對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,是不是你說的情況?

我想大声告诉你我想大声告诉你2791 天前751

全部回覆(3)我來回復

  • 巴扎黑

    巴扎黑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

    你在這個 commit 之後創建了新的 branch

    ,叫 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 的地址🎜

    回覆
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:49:39

    因為還有自動合併啊。你是在手動合併分支時看到衝突的嗎?

    回覆
    0
  • PHP中文网

    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不在同一條線上了。

    回覆
    0
  • 取消回覆