Git获取dev分支推送后变更文件,排除合并master的变更
解决方法
要获取dev分支自上次推送到origin/dev后,仅属于dev分支自身的变更文件(排除从origin/master合并带来的内容),可以使用以下Git命令:
git diff --name-status origin/dev...dev --first-parent
命令解析
origin/dev...dev:该语法用于对比仅在dev分支上存在、而origin/dev没有的提交变更,排除两边共有的提交历史。--first-parent:强制Git只追踪dev分支的主提交路径(即你直接在dev上完成的提交),跳过合并origin/master时引入的所有外部变更。--name-status:输出每个变更文件的状态(如A代表新增、M代表修改)和文件名,完全匹配你需要的文件列表需求。
对应示例场景验证
按照你给出的步骤执行后:
- origin/dev为推送后的初始状态
- 在dev上提交local_1、合并origin/master(引入external_1)、提交local_2
- 执行上述命令后,只会输出
local_1和local_2的状态与文件名,external_1会被完全排除。
为什么之前的git log方法有局限
你之前使用的git log origin/dev...dev --no-merges --first-parent --name-status会列出所有符合条件的提交中的文件,即使某个文件被修改后又改回原始状态,也会在日志中多次出现。而git diff是直接对比origin/dev和当前dev分支(仅主路径)的最终状态差异,只会显示真正有变更的文件(若文件被改回则不会出现在结果中),更贴合你获取“最终变更文件列表”的需求。
内容的提问来源于stack exchange,提问作者Disimasar
相关产品推荐
相关产品推荐

