You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比Git工作区(Working Directory)与暂存区(Staging Area)及git diff差异

git diff默认行为疑问解答

为什么同一个git diff命令会输出两种不同的结果

无参数的git diff的对比逻辑从始至终都是固定的:对比工作区与暂存区的文件差异,不存在规则切换的情况。
你观察到的差异只是结果重合:暂存区的内容默认和当前HEAD指向的提交完全一致,只有你执行git add暂存修改时,暂存区的内容才会和HEAD产生区别。所以当暂存区没有任何已暂存的变更时,「工作区和暂存区的差异」和「工作区和HEAD的差异」完全一样,看起来就像命令换了对比对象,实际只是暂存区此时和HEAD内容没有区别而已。

如何正确对比工作区与暂存区的文件差异

直接使用无参数的git diff就可以,这是Git官方定义的该命令的默认功能,不管暂存区有没有内容,它都会严格按照「工作区vs暂存区」的规则对比,不会出错。
如果想彻底避免语义歧义,也可以用带显式参数的写法:
git diff --worktree --cached
如果只需要对比特定路径的文件差异,在命令末尾补充对应路径即可,例如对比src目录下的差异:
git diff src/

内容的提问来源于stack exchange,提问作者Ahmad Ismail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:06:02