Git 使用技巧——查看 Commit 修改文件的概要

Git 使用技巧------查看 Commit 修改文件的概要

在日常 Git 版本管理中,经常需要查询某个 Commit 修改了哪些文件,甚至每个文件的增删行数统计,本文整理了多种实用方法,覆盖不同使用场景,满足从「简洁文件列表」到「详细行数统计」的各类需求。

一、前置准备:获取 Commit ID

所有操作都需要先获取目标 Commit 的 commit-idcommit-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(-)
输出解读
  1. 文件行格式:文件路径 | 总修改行数 可视化增删比例

    • 总修改行数:该文件增删行数之和(如 8 表示总计修改 8 行)

    • 可视化增删比例:+ 对应新增行,- 对应删除行,快速感知增删幅度

  2. 总计行: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>
输出解读
  1. 先展示 Commit 基本信息,再展示每个文件的具体变更

  2. diff --git a/文件路径 b/文件路径 分隔不同文件的修改

  3. 代码变更中:+ 开头表示新增内容,- 开头表示删除内容

六、常用命令速查表

为方便快速查阅,整理核心场景的常用命令如下:

需求场景 核心命令
仅查看修改文件列表(纯净) 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>

总结

  1. 按需选择命令:仅要文件列表用 git diff-tree --name-only,要增删行数用 git show --stat,要完整修改内容用 git show

  2. 便捷技巧:最近提交用 HEAD/HEAD^ 替代 commit-idcommit-id 可简写前 6-8 位。

  3. 速查表可直接留存,日常使用无需记忆复杂参数,按需复制即可提升操作效率。

相关推荐
矢志航天的阿洪12 小时前
从GitHub到本地:Python IGRF库环境配置完全指南
开发语言·python·github
Howie Zphile13 小时前
Git 拉 NocoBase 2.0 beta(next 分支),并“每天自动更新 + 自动编译 + 自动重启”
大数据·git·elasticsearch
吕司14 小时前
Git分支管理
git
黑屋里的马15 小时前
GitExtension下载、安装
git·gitextension
Geoking.15 小时前
Git 中的 Rebase 与 Merge:原理、区别与最佳实践
git
chunmiao303216 小时前
了解github上,watch,fork,star代表啥
github
CoderJia程序员甲16 小时前
GitHub 热榜项目 - 日榜(2026-01-30)
开源·大模型·llm·github·ai教程
invicinble17 小时前
一文了解git
大数据·git·elasticsearch
我命由我1234517 小时前
Git 初始化本地仓库并推送到远程仓库解读
运维·服务器·经验分享·笔记·git·学习·学习方法