如何对比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
相关产品推荐
相关产品推荐

