差异摘要是什么
git diff --stat 把改动压缩成每个文件一行:文件名、改动条数,以及一串用加号减号画出的比例条。它不展开具体内容,只回答「改了哪些文件、规模多大」。评审时先看摘要掌握全貌,再决定深入哪些文件,比从头读整份补丁高效。
几种机器可读的变体
需要脚本处理时,--numstat 用制表符分隔出新增与删除的行数,字段位置固定;--name-only 只给文件名;--name-status 每行给出状态字母与路径,能区分新增、修改、删除与重命名。三者都能配合提交范围或路径过滤一起使用。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 语法 | git diff --stat [<提交>] [-- <路径>] |
| --stat | 图形化增删摘要 |
| --numstat | 制表符分隔的机器可读格式 |
| --name-status | 每行「状态字母加路径」 |
| 常见组合 | 与 --staged、提交范围、路径过滤搭配 |
典型使用场景
- 评审摸底:先看规模,再安排阅读顺序
- 提交前确认:检查是否夹带了不相关的大文件改动
- 脚本统计:用 --numstat 汇总改动行数
- 生成清单:用 --name-only 或 --name-status 输出改动文件列表
- 版本对比:比较两个标签之间的改动规模
常用示例
常用示例
git diff --stat # 未暂存改动的摘要
git diff --staged --stat # 待提交改动的摘要
git diff --numstat # 供脚本解析的行数统计
git diff --name-only # 只列文件名
git diff --name-status HEAD~3 # 状态字母加路径
git diff --stat v1.4.0 v1.5.0 # 两个版本之间的规模几种摘要格式
| 选项 | 输出形态 | 适用场合 |
|---|---|---|
| --stat | 每文件一行加比例条 | 人工阅读 |
| --numstat | 制表符分隔的增删行数 | 脚本统计 |
| --name-only | 只列路径 | 生成文件清单 |
| --name-status | 状态字母加路径 | 需要区分动作类型 |
评审时先看 --stat 掌握规模,再按文件重要度安排阅读顺序,比从头读完整补丁高效得多。
摘要只反映规模,不反映语义。删掉大量代码可能是重构,也可能是功能被摘除,判断之前仍然需要展开具体文件查看。
带提交范围的摘要很适合做发布清单:比较两个标签之间的差异,一眼就能看出这个版本动了多少文件、集中在哪些目录。