如何只列出两个提交之间变化的文件名

列出两提交间变化的文件名:git diff --name-only A B;带状态(增删改)用 --name-status;只要统计用 --stat。分支间同样适用:git diff --name-only main..feature。

最佳实践
Git 提交历史与版本恢复示意

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 更直接。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台