Git 怎么判断是否冲突?

📌 [Q&A] Git 怎么判断是否冲突?

Git 使用的是三路合并算法(Three-way Merge),它比较:

共同祖先提交(base)

当前分支的改动(ours)

被合并分支的改动(theirs)

如果:

场景描述 是否冲突 合并结果
两个分支都对同一文件的同一部分做了修改 ✅ 是 需手动解决冲突后完成合并
只有一个分支修改了这部分内容 ❌ 否 自动合并成功,保留修改内容
文件不同部分被修改 ❌ 否 自动合并成功,整合不同部分修改

📌 [Q&A] 两个分支都对同一文件的同一部分做了修改,同一部分指的范围多大?

1、文件被分成多个"代码块(hunks)"

2、如果两个分支都修改了同一个 hunk 或其附近区域,并且这些修改是"非线性可合并"的(比如都改了某一行)Git 就认为这两个修改属于"同一部分"→ 标记为冲突。

判断标准 是否可能冲突
同一行被修改 ✅ 必然冲突
相邻几行都被修改(如 3 行以内) ✅ 可能冲突
修改的行相隔较远(如超过 5 行) ❌ 不冲突
修改了同一个函数 / 逻辑块但不在同一 hunk ❌ 不冲突

⚠️"非线性可合并":是指两个分支对同一段代码的修改互相干扰、无法简单地拼接在一起而不丢失逻辑意义。