Git:如何比较不同分支提交并检测双方共同修改的文件?
直接检测分支间共同修改文件的Git命令方案
步骤1:获取两个提交的共同祖先节点
先拿到commit-A和commit-B的共同源节点(merge base),把它存为变量方便后续复用:
BASE=$(git merge-base commit-A commit-B)
步骤2:直接输出两个分支共同修改的文件
用组合命令一次性提取两个提交相对于共同祖先都修改过的文件:
comm -12 <(git diff --name-only $BASE commit-A | sort) <(git diff --name-only $BASE commit-B | sort)
命令解释:
git diff --name-only $BASE <commit>:仅列出指定提交与共同祖先相比修改过的文件路径<(...):将命令输出临时当作文件输入(shell进程替换特性,需bash/zsh支持)comm -12:对比两个排序后的文件列表,只保留双方共有的行——也就是两个分支都修改过的文件
额外:查看共同修改文件的具体差异
如果需要直接查看这些共同文件在两个分支中的具体改动,可以把上面的结果作为参数传给git diff:
git diff commit-A commit-B -- $(comm -12 <(git diff --name-only $BASE commit-A | sort) <(git diff --name-only $BASE commit-B | sort))
内容的提问来源于stack exchange,提问作者iostrym
相关产品推荐
相关产品推荐

