如何只列出两个提交之间变化的文件名
列出两提交间变化的文件名:git diff --name-only A B;带状态(增删改)用 --name-status;只要统计用 --stat。分支间同样适用:git diff --name-only main..feature。
git diff --name-only <提交A> <提交B>:只输出变化的文件路径,一行一个,无 diff 内容——脚本处理的理想格式。要带上"新增/修改/删除"状态用 --name-status。
用法
git diff --name-only a1b2c3d e4f5g6h
git diff --name-only HEAD~5 HEAD # 最近 5 个提交动了哪些文件
git diff --name-only main feature-x # 分支间
git diff --name-status A B # 带状态:A 新增 / M 修改 / D 删除
git diff --stat A B # 带增删行数统计
实用过滤
# 只看删除的文件
git diff --name-status A B | grep '^D' | cut -f2
# 只看 js 文件
git diff --name-only A B -- '*.js'
典型场景
- CI 增量构建:只构建有变化的模块:
git diff --name-only origin/main...HEAD; - 代码审查:先看文件清单评估 PR 范围,再逐个看 diff;
- 部署影响面:发布说明里附上变更文件列表。
常见问题(FAQ)
Q:merge 提交之间比较有坑吗?
A..B 是端点对比。想知道"B 分支带来了什么"用三点:git diff --name-only A...B(从共同祖先比到 B)。
Q:输出里有乱码路径?
中文文件名默认被转义成八进制。git config core.quotepath false 后正常显示。
Q:能列出"某次提交单独"的文件清单吗?
git diff-tree --no-commit-id --name-only -r <哈希>,单提交场景比 diff 更直接。