You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动检测Git中两个分支是否修改了同一行代码

检测两个分支是否修改了master的同一行代码

我完全懂你的需求:只关注branch1、branch2各自与master的最终差异,不纠结分支历史里的中间提交,还要避开拣选提交带来的误报。下面分享两个实用的解决方法:

方法一:用Git补丁检查冲突(最直接高效)

这个方法借助Git的补丁应用校验功能,直接验证两个分支的差异在master上是否会产生行冲突:

  1. 先确保本地仓库同步最新代码,切换到master分支:
git checkout master
git pull
  1. 创建一个临时分支(仅用于检测,不会影响原有分支):
git checkout -b temp-conflict-check
  1. 把branch1相对于master的所有修改应用到临时分支:
git diff master..branch1 | git apply --index

--index参数会同步修改工作区和暂存区,让后续的冲突检查更准确。

  1. 现在校验branch2的差异能否无冲突地应用:
git diff master..branch2 | git apply --check
  • 如果没有任何输出,说明两个分支的修改没有重叠的行;
  • 如果输出类似error: patch failed: file.txt:123和error: file.txt: patch does not apply的内容,就代表对应文件里存在两个分支都修改过的行。
  1. 检测完成后,删除临时分支即可:
git checkout master
git branch -D temp-conflict-check

方法二:手动定位共同修改的文件与行(更精细)

如果你想明确知道具体是哪些文件、哪些行被共同修改,可以分两步排查:

第一步:找出两个分支都改动过的文件

先分别导出两个分支相对于master的修改文件列表,再筛选出交集:

# 导出branch1修改的文件列表
git diff --name-only master..branch1 | sort > branch1-modified.txt
# 导出branch2修改的文件列表
git diff --name-only master..branch2 | sort > branch2-modified.txt
# 找出两个分支都修改的文件
comm -12 branch1-modified.txt branch2-modified.txt

输出结果就是两个分支都改动过的文件,接下来只针对这些文件检查行的重叠情况。

第二步:检查单个文件的修改行重叠

以共同文件src/utils.js为例,我们可以提取两个分支的修改行范围,再判断是否存在重叠:

  1. 提取branch1相对于master的修改行范围:
git diff -U0 master..branch1 -- src/utils.js | grep -E '^@@' | sed -E 's/@@ -([0-9]+)(,[0-9]+)? \+([0-9]+)(,[0-9]+)? @@/\1-\1\2/'

这个命令会输出类似45-50的行范围,表示branch1修改了第45到50行。

  1. 用同样的命令提取branch2的修改行范围:
git diff -U0 master..branch2 -- src/utils.js | grep -E '^@@' | sed -E 's/@@ -([0-9]+)(,[0-9]+)? \+([0-9]+)(,[0-9]+)? @@/\1-\1\2/'
  1. 对比这两个行范围,如果有重叠,就说明该文件存在共同修改的行。你可以手动对比,或者写个简单的脚本(比如用Python的区间重叠判断逻辑)自动校验。

内容的提问来源于stack exchange,提问作者Rubén Morales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:03:03