📌 [Q&A] Git 怎么判斷是否沖突?
Git 使用的是三路合并算法(Three-way Merge),它比較:
共同祖先提交(base)
當前分支的改動(ours)
被合并分支的改動(theirs)
如果:
場景描述 | 是否沖突 | 合并結果 |
---|---|---|
兩個分支都對同一文件的同一部分做了修改 | ? 是 | 需手動解決沖突后完成合并 |
只有一個分支修改了這部分內容 | ? 否 | 自動合并成功,保留修改內容 |
文件不同部分被修改 | ? 否 | 自動合并成功,整合不同部分修改 |
📌 [Q&A] 兩個分支都對同一文件的同一部分做了修改,同一部分指的范圍多大?
1、文件被分成多個“代碼塊(hunks)”
2、如果兩個分支都修改了同一個 hunk 或其附近區域,并且這些修改是“非線性可合并”的(比如都改了某一行)Git 就認為這兩個修改屬于“同一部分”→ 標記為沖突。
判斷標準 | 是否可能沖突 |
---|---|
同一行被修改 | ? 必然沖突 |
相鄰幾行都被修改(如 3 行以內) | ? 可能沖突 |
修改的行相隔較遠(如超過 5 行) | ? 不沖突 |
修改了同一個函數 / 邏輯塊但不在同一 hunk | ? 不沖突 |
??“非線性可合并”:是指兩個分支對同一段代碼的修改互相干擾、無法簡單地拼接在一起而不丟失邏輯意義。