如何列出某个提交包含(改动)的所有文件

列出提交涉及的文件:git show --name-only --oneline <哈希>,或脚本友好的 git diff-tree --no-commit-id --name-only -r <哈希>。带增删改状态用 --name-status,看统计用 --stat。

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

给人看用 git show --stat <提交哈希>(文件清单+改动统计);脚本里用 git diff-tree --no-commit-id --name-only -r <哈希>——纯净的文件路径列表,一行一个,方便管道处理。

命令对比

git show --name-only --oneline a1b2c3d    # 提交信息 + 文件清单
git show --stat a1b2c3d                    # 文件清单 + 增删行数
git show --name-status a1b2c3d             # 带状态:A新增 M修改 D删除

git diff-tree --no-commit-id --name-only -r a1b2c3d   # 纯净路径列表

脚本中遍历

for f in $(git diff-tree --no-commit-id --name-only -r a1b2c3d); do
  echo "处理 $f"
done

# 筛选只删除的文件
git diff-tree --no-commit-id --name-status -r a1b2c3d | grep '^D'

看工作区/暂存区的文件

git status --short           # 当前未提交的变更文件
git diff --name-only         # 工作区改动的文件
git diff --cached --name-only  # 已暂存的文件

常见问题(FAQ)

Q:merge 提交用这些命令为什么没输出?

merge 提交相对两个父提交的组合 diff 默认不展开。用 git show --first-parent --name-only <合并提交> 或 git diff <合并提交>^1 <合并提交> --name-only 显式对比主线父提交。

Q:想连文件内容一起看?

git show a1b2c3d(不加 --name-only)输出完整 diff。

Q:如何导出某提交的所有文件(打包)?

git archive -o files.zip a1b2c3d 打整个快照;只打改动文件:git diff-tree ... | zip archive.zip -@。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台