如何获取与上游分支的变更文件列表并忽略合并提交?
解决Git合并后获取本地分支独有变更文件的方法
当你把master合并到本地featureA分支后,用git diff --name-only origin/featureA -- .会把合并提交里的文件也算进来,这时候可以用以下两种方式只获取本地分支自己的变更文件:
方法一:使用Git三点diff语法
直接执行这个命令:
git diff --name-only origin/featureA...featureA
这个命令的本质是对比本地featureA分支和本地featureA与远程origin/featureA的共同祖先之间的差异,自动排除了合并进来的master分支内容,只保留你在featureA上自己修改的文件。
对比两种语法的区别:
- 两点语法
origin/featureA..featureA:会列出远程分支到本地分支的所有变更(包括合并提交带来的master文件) - 三点语法
origin/featureA...featureA:只列出本地分支相对于共同祖先的独有变更,完美过滤合并内容
方法二:手动筛选非合并提交
如果你需要更精准地排除所有合并提交,可以先找出本地分支相对于远程的非合并提交,再diff这些提交的范围:
# 获取本地相对于远程的最后一个非合并提交 local_commit=$(git rev-list --no-merges origin/featureA..featureA | tail -1) # 对比该提交与远程分支的差异 git diff --name-only origin/featureA $local_commit
不过这种方式比三点语法繁琐,一般推荐用三点语法更高效。
内容的提问来源于stack exchange,提问作者OLIVER.KOO
相关产品推荐
相关产品推荐

