如何查看已暂存(staged)的改动
git diff --cached(等价 --staged)查看暂存区与上次提交的差异;--stat 看摘要。提交前养成检查暂存内容的习惯,附配套命令。
一句话回答:git diff --cached(或等价写法 git diff --staged)——显示暂存区与最近一次提交之间的差异,即"如果现在 commit,会提交什么"。看摘要用 git diff --cached --stat。
三个 diff 的分工
git diff # 工作区 vs 暂存区:改了但还没 add 的部分
git diff --cached # 暂存区 vs HEAD:已 add、待提交的部分 ⭐
git diff HEAD # 工作区 vs HEAD:已跟踪文件的最终差异,不含未跟踪文件
提交前过一遍 git diff --cached 是值得养成的习惯——确认没有误加的调试代码、密钥文件、大段注释。
实用变体
git diff --cached --stat # 只看文件清单和改动行数
git diff --cached --name-only # 只看文件名
git diff --cached -- src/app.js # 只看某个文件的暂存改动
git diff --cached -U10 # 上下文从 3 行加宽到 10 行
git diff --cached --color-words # 词级高亮,看文案改动很舒服
提交前的完整检查流程
git status # 1. 哪些文件处于什么状态
git diff --cached # 2. 待提交内容终审
git commit -m "..." # 3. 放心提交
发现某个文件不该提交:git restore --staged 文件名 撤出暂存区,不影响工作区改动。
常见问题(FAQ)
Q:git diff --cached 没输出,但 git status 显示有暂存文件?
A:新仓库没有 HEAD 时,git diff --cached 会显示全部已暂存内容,不必先提交。纯重命名可用 git diff --cached --summary 查看。还应检查当前仓库、路径过滤器、外部 diff 设置,以及 git status 显示的究竟是暂存还是未暂存列。
Q:--cached 和 --staged 完全一样吗?
A:完全等价,--staged 是后来加的语义化别名。团队统一一个即可。
Q:GUI 工具里怎么看?
A:VS Code 源代码管理面板点击"Staged Changes"区的文件直接显示暂存 diff;其他 GUI 的界面和暂存模型可能不同,不应假定 GitHub Desktop 也有同样的 Staged 分区。命令行习惯配 GUI 检查最稳。
核查依据
本文依据官方文档核对,示例未在实际业务环境运行;上线前请按部署版本、权限与数据范围验证。