首页/开发/Git 与协作速查/git diff --staged 复核待提交内容
Git 基础与命令88 条

git diff --staged 复核待提交内容

检查即将进入提交的改动:--staged 等价 --cached,比较暂存区与 HEAD,是提交前的一道复核。

Git 与协作速查开发更新于 2026-10-13

git diff --staged 是什么

git diff --staged 比较暂存区与最近一次提交(HEAD),回答的问题是「如果现在提交,会带上哪些改动」。它是提交前的最后一道人工复核,也是排查「明明 add 了却没进提交」这类问题的关键视角。

和 git diff 的关系

两个命令看的是同一套三区模型的不同切面:git diff 比较工作区与暂存区,看还没 add 的内容;git diff --staged 比较暂存区与 HEAD,看这次会提交什么。一起使用时,两次输出的并集就是相对上次提交的全部变化,交叉比对还能定位改动停在哪一层。

基本信息

适用平台Linux / macOS / Windows(Git 2.x)
语法git diff --staged [选项] [--] [路径]
别名--cached 完全等价
比较对象暂存区 vs HEAD
常用搭配--stat 摘要;--name-only 只列文件名
典型用途提交前复核、脚本校验提交内容

典型使用场景

  • 提交前通读:确认即将提交的每一处改动都是有意为之
  • 审查范围:用 --name-only 或 --stat 快速看清单与规模
  • 排查遗漏:新文件没出现在输出里,说明它还没被 add
  • 脚本校验:在钩子里检查是否夹带了生成物或大文件
  • 拆分提交:配合 add -p 逐块确认,让每条提交只含一类改动

常用示例

常用示例
git diff --staged              # 通读这次会提交的内容
git diff --staged --stat       # 只看每个文件的增删规模
git diff --cached --name-only  # 只列文件名,便于脚本处理
git add -p && git diff --staged  # 组好暂存内容后立刻复核
git diff --staged -- '*.py'    # 只看某类文件的暂存改动

两个视角的分工

命令比较对象回答的问题
git diff工作区 vs 暂存区还没 add 的改动是什么
git diff --staged暂存区 vs HEAD这次提交会带上什么
git diff HEAD工作区 vs HEAD相对上次提交一共改了什么
git status --short各层状态摘要改动分别停在哪一层
配合 git add -p 的节奏:先按补丁块组好暂存内容,再用 --staged 通读一遍,提交质量会明显提升。
新文件必须先用 git add 才会出现在 --staged 输出里。看到输出里少了文件,先检查它是否还处于未跟踪状态。

易错点

  • 新文件必须先 git add 才会出现在 --staged 输出中,否则会误判为没有改动
  • 部分暂存时暂存区与工作区各存一半改动,两个 diff 视角都要看才能看全
  • 用 --staged 通过就以为万无一失,未跟踪的新文件根本不在任何 diff 里
  • 把生成物或大文件混进暂存区后提交,事后清理要重写历史,提交前先核对清单

数据来源与参考

  • Git 官方文档:git-diff(--cached/--staged)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌