Git 查看 Commit 修改文件概要的常用命令与技巧
本文介绍了 Git 中查看 Commit 修改文件概要的多种方法。包括仅查看文件列表(git diff-tree, git log)、查看增删行数统计(git show --stat, git diff-tree --stat)、精准数字统计(--numstat)以及查看具体代码变更(git show)。提供了获取 Commit ID 的方法及 HEAD 快捷标识,并整理了常用命令速查表,帮助用户根据需求选择合适命令高效管理版本。

本文介绍了 Git 中查看 Commit 修改文件概要的多种方法。包括仅查看文件列表(git diff-tree, git log)、查看增删行数统计(git show --stat, git diff-tree --stat)、精准数字统计(--numstat)以及查看具体代码变更(git show)。提供了获取 Commit ID 的方法及 HEAD 快捷标识,并整理了常用命令速查表,帮助用户根据需求选择合适命令高效管理版本。

在日常 Git 版本管理中,经常需要查询某个 Commit 修改了哪些文件,甚至每个文件的增删行数统计,本文整理了多种实用方法,覆盖不同使用场景,满足从「简洁文件列表」到「详细行数统计」的各类需求。
所有操作都需要先获取目标 Commit 的 commit-id,commit-id 是一串 40 位的哈希值,Git 支持简写前 6-8 位使用,获取方式如下:
# 简洁格式查看提交历史(优先推荐,输出包含 简写 commit-id + 提交说明)
git log --oneline
# 完整格式查看提交历史(包含完整 commit-id、作者、时间、提交说明)
git log
对于最近的提交,可直接使用以下标识替代 commit-id,提升操作效率:
HEAD:指向当前分支最新的一次提交HEAD^ / HEAD~1:指向最新提交的上一次提交HEAD~2:指向最新提交的上两次提交(以此类推,~N 表示上 N 次提交)适用于只需要知道「哪些文件被修改」,不需要额外信息的场景,输出干净无冗余。
专门为「仅列出修改文件」设计,支持递归遍历子目录,可选显示文件修改状态。
# 基础用法:仅输出修改文件的路径/名称(最简洁)
git diff-tree -r --name-only <commit-id>
# 进阶用法:输出文件路径 + 修改状态(A=新增、M=修改、D=删除)
git diff-tree -r --name-status <commit-id>
-r:递归遍历子目录,确保列出所有修改文件(不加仅显示被修改的目录,不显示目录内具体文件)--name-only:仅保留文件名称/路径,无其他额外信息--name-status:在文件路径前添加修改状态标识,快速区分文件变更类型 M src/utils/login.js A src/pages/Profile.vue D src/assets/old-logo.png
在查看文件列表的同时,保留 Commit 的作者、时间、提交说明,无需单独获取 commit-id。
# 查看单个 Commit 的文件列表(-1 表示仅显示 1 个 Commit 的信息)
git log -1 --name-only <commit-id>
# 查看单个 Commit 的文件列表 + 修改状态
git log -1 --name-status <commit-id>
# 拓展:查看最近 3 个 Commit 的文件列表 + 修改状态(将 -1 改为 -N 即可查看最近 N 个)
git log -3 --name-status
适用于需要知道「哪些文件被修改」且「每个文件/总计增删多少行」的场景,无需查看具体代码变更。
输出包含 3 部分核心内容:Commit 基本信息、修改文件列表 + 单行增删统计、总计增删行数,直观全面。
# 核心命令
git show --stat <commit-id>
--stat:生成文件修改的统计信息(statistics),是获取增删行数的关键参数commit a1b2c3d01234567890abcdef1234567890abcdefa
Author: Your Name <[email protected]>
Date: Fri Jan 30 10:00:00 2026 +0800
修复用户登录验证 bug
src/utils/login.js | 8 +++++---
src/pages/Profile.vue | 15 +++++++++++++++
package.json | 2 +-
3 files changed, 20 insertions(+), 5 deletions(-)
文件路径 | 总修改行数 可视化增删比例
8 表示总计修改 8 行)+ 对应新增行,- 对应删除行,快速感知增删幅度N files changed, X insertions(+), Y deletions(-),汇总本次 Commit 的文件修改数、新增行数、删除行数如果不需要 Commit 的作者、时间等信息,仅需获取文件列表 + 增删行数统计,使用该命令。
git diff-tree -r --stat <commit-id>
src/utils/login.js | 8 +++++---
src/pages/Profile.vue | 15 +++++++++++++++
package.json | 2 +-
3 files changed, 20 insertions(+), 5 deletions(-)
如果需要查询「两个 Commit 之间」的文件修改及增删行数,使用 git diff --stat。
git diff --stat <commit-id1> <commit-id2>
适用于需要精准获取「每个文件单独的新增行数、删除行数」,无需可视化展示的场景,输出格式更规整,便于后续处理。
# 核心命令:--numstat 替代 --stat,输出数字化统计结果
git show --numstat <commit-id>
# 纯净版(无 Commit 基本信息)
git diff-tree -r --numstat <commit-id>
3 5 src/utils/login.js
0 15 src/pages/Profile.vue
1 1 package.json
每行格式:删除行数 新增行数 文件路径(两列数字分别对应删除、新增,无修改则为 0)
适用于需要深入了解「每个文件具体修改了哪些代码」的场景,是日常排查问题的常用命令。
# 核心命令
git show <commit-id>
diff --git a/文件路径 b/文件路径 分隔不同文件的修改+ 开头表示新增内容,- 开头表示删除内容为方便快速查阅,整理核心场景的常用命令如下:
| 需求场景 | 核心命令 |
|---|---|
| 仅查看修改文件列表(纯净) | git diff-tree -r --name-only <commit-id> |
| 仅查看修改文件列表 + 变更状态 | git diff-tree -r --name-status <commit-id> |
| 查看文件列表 + 增删行数统计(含 Commit 信息) | git show --stat <commit-id> |
| 查看文件列表 + 精准增删行数(数字化) | git show --numstat <commit-id> |
| 查看文件列表 + 具体代码修改内容 | git show <commit-id> |
| 最近一次提交的增删行数统计 | git show --stat HEAD |
| 两个 Commit 之间的文件增删统计 | git diff --stat <commit-id1> <commit-id2> |
git diff-tree --name-only,要增删行数用 git show --stat,要完整修改内容用 git show。HEAD/HEAD^ 替代 commit-id,commit-id 可简写前 6-8 位。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online