📌 [Q&A] Git 怎么判断是否冲突?
Git 使用的是三路合并算法(Three-way Merge),它比较:
共同祖先提交(base)
当前分支的改动(ours)
被合并分支的改动(theirs)
如果:
场景描述 | 是否冲突 | 合并结果 |
---|---|---|
两个分支都对同一文件的同一部分做了修改 | ✅ 是 | 需手动解决冲突后完成合并 |
只有一个分支修改了这部分内容 | ❌ 否 | 自动合并成功,保留修改内容 |
文件不同部分被修改 | ❌ 否 | 自动合并成功,整合不同部分修改 |
📌 [Q&A] 两个分支都对同一文件的同一部分做了修改,同一部分指的范围多大?
1、文件被分成多个"代码块(hunks)"
2、如果两个分支都修改了同一个 hunk 或其附近区域,并且这些修改是"非线性可合并"的(比如都改了某一行)Git 就认为这两个修改属于"同一部分"→ 标记为冲突。
判断标准 | 是否可能冲突 |
---|---|
同一行被修改 | ✅ 必然冲突 |
相邻几行都被修改(如 3 行以内) | ✅ 可能冲突 |
修改的行相隔较远(如超过 5 行) | ❌ 不冲突 |
修改了同一个函数 / 逻辑块但不在同一 hunk | ❌ 不冲突 |
⚠️"非线性可合并":是指两个分支对同一段代码的修改互相干扰、无法简单地拼接在一起而不丢失逻辑意义。