Git 使用技巧------查看 Commit 修改文件的概要
在日常 Git 版本管理中,经常需要查询某个 Commit 修改了哪些文件,甚至每个文件的增删行数统计,本文整理了多种实用方法,覆盖不同使用场景,满足从「简洁文件列表」到「详细行数统计」的各类需求。
一、前置准备:获取 Commit ID
所有操作都需要先获取目标 Commit 的 commit-id,commit-id 是一串 40 位的哈希值,Git 支持简写前 6-8 位使用,获取方式如下:
Bash
# 简洁格式查看提交历史(优先推荐,输出包含 简写commit-id + 提交说明)
git log --oneline
# 完整格式查看提交历史(包含完整 commit-id、作者、时间、提交说明)
git log
便捷替代标识(无需手动复制 Commit ID)
对于最近的提交,可直接使用以下标识替代 commit-id,提升操作效率:
-
HEAD:指向当前分支最新的一次提交 -
HEAD^/HEAD~1:指向最新提交的上一次提交 -
HEAD~2:指向最新提交的上两次提交(以此类推,~N表示上 N 次提交)
二、场景 1:仅查看「修改的文件列表」(无具体内容/统计)
适用于只需要知道「哪些文件被修改」,不需要额外信息的场景,输出干净无冗余。
方法 1:git diff-tree(精准纯净,优先推荐)
专门为「仅列出修改文件」设计,支持递归遍历子目录,可选显示文件修改状态。
Bash
# 基础用法:仅输出修改文件的路径/名称(最简洁)
git diff-tree -r --name-only <commit-id>
# 进阶用法:输出文件路径 + 修改状态(A=新增、M=修改、D=删除)
git diff-tree -r --name-status <commit-id>
参数说明
-
-r:递归遍历子目录,确保列出所有修改文件(不加仅显示被修改的目录,不显示目录内具体文件) -
--name-only:仅保留文件名称/路径,无其他额外信息 -
--name-status:在文件路径前添加修改状态标识,快速区分文件变更类型
示例输出(--name-status)
Plain
M src/utils/login.js
A src/pages/Profile.vue
D src/assets/old-logo.png
方法 2:git log(附带 Commit 基本信息,一步到位)
在查看文件列表的同时,保留 Commit 的作者、时间、提交说明,无需单独获取 commit-id。
Bash
# 查看单个 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
三、场景 2:查看「文件列表 + 增删行数统计」(简要汇总)
适用于需要知道「哪些文件被修改」且「每个文件/总计增删多少行」的场景,无需查看具体代码变更。
方法 1:git show --stat(完整信息,优先推荐)
输出包含 3 部分核心内容:Commit 基本信息、修改文件列表+单行增删统计、总计增删行数,直观全面。
Bash
# 核心命令
git show --stat <commit-id>
参数说明
--stat:生成文件修改的统计信息(statistics),是获取增删行数的关键参数
示例输出
Plain
commit a1b2c3d01234567890abcdef1234567890abcdefa
Author: Your Name <your.email@example.com>
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 的文件修改数、新增行数、删除行数
方法 2:git diff-tree --stat(纯净统计,无 Commit 基本信息)
如果不需要 Commit 的作者、时间等信息,仅需获取文件列表+增删行数统计,使用该命令。
Bash
git diff-tree -r --stat <commit-id>
示例输出
Plain
src/utils/login.js | 8 +++++---
src/pages/Profile.vue | 15 +++++++++++++++
package.json | 2 +-
3 files changed, 20 insertions(+), 5 deletions(-)
方法 3:拓展:对比两个 Commit 之间的增删行数统计
如果需要查询「两个 Commit 之间」的文件修改及增删行数,使用 git diff --stat。
Bash
git diff --stat <commit-id1> <commit-id2>
四、场景 3:更详细的行统计(数字规整化)
适用于需要精准获取「每个文件单独的新增行数、删除行数」,无需可视化展示的场景,输出格式更规整,便于后续处理。
Bash
# 核心命令:--numstat 替代 --stat,输出数字化统计结果
git show --numstat <commit-id>
# 纯净版(无 Commit 基本信息)
git diff-tree -r --numstat <commit-id>
示例输出
Plain
3 5 src/utils/login.js
0 15 src/pages/Profile.vue
1 1 package.json
输出解读
每行格式:删除行数 新增行数 文件路径(两列数字分别对应删除、新增,无修改则为 0)
五、场景 4:查看「文件列表 + 具体修改内容」(完整详情)
适用于需要深入了解「每个文件具体修改了哪些代码」的场景,是日常排查问题的常用命令。
Bash
# 核心命令
git show <commit-id>
输出解读
-
先展示 Commit 基本信息,再展示每个文件的具体变更
-
以
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 位。 -
速查表可直接留存,日常使用无需记忆复杂参数,按需复制即可提升操作效率。