git diff查看工作区与暂存区差异,git diff --cached查看暂存区与最后一次提交差异,git diff对比历史提交,git log -p --follow查看文件修改历史。

在Mac终端中快速定位某次修改发生在哪一行、改了什么内容,是排查问题和协作审查的基础动作。直接运行命令却看不到差异,往往是因为没指定比较对象或文件未被Git跟踪。
查看工作区与暂存区的差异
执行 git diff 命令,只显示已修改但尚未 git add 的内容。这一步不带参数,输出的是工作区(你正在编辑的文件)和暂存区(git add 过的内容)之间的区别。
如果文件从未被 git add 过,git diff 仍会显示修改,但 git diff --cached 将无输出——因为暂存区根本没它。
查看暂存区与最后一次提交的差异
运行 git diff --cached(等价于 git diff --staged),能看到已 add 但还没 commit 的变更。这是确认“待提交内容是否准确”的关键检查点。
【必须先执行 git add 才能看到结果】。如果跳过 add 直接运行该命令,终端不会报错,但也不会输出任何内容——容易误以为“没改”,实际是还没进暂存区。
查看两次历史提交之间的具体改动
方法一:用简写哈希比对相邻提交
输入 git diff HEAD~1 HEAD,对比上一个版本和当前版本的全部差异。HEAD~1 表示父提交,HEAD 是当前提交指针。
方法二:用完整或缩略提交ID精确比对
先用 git log --oneline 查出两个目标版本的前7位哈希,例如 a1b2c3d 和 e4f5g6h,再执行 git diff a1b2c3d e4f5g6h。
方法三:跨分支对比改动
比如想看 dev 分支比 master 多改了哪些行,运行 git diff master...dev(注意是三个点)。这个语法会找出从共同祖先到 dev 分支顶端的所有变更,排除 master 已有的内容。
快速定位某个文件的全部修改历史
第一步:确认文件已被Git跟踪
运行 git ls-files | grep "filename",若无输出,说明该文件从未 add 或已被 .gitignore 排除。
第二步:查看该文件每次提交时的变更细节
执行 git log -p --follow filename。-p 显示补丁内容,--follow 能追踪文件重命名后的历史,避免因改名导致记录中断。
第三步:精简查看每次提交的摘要和变更行数
用 git log --stat filename,每条记录下方会标出增删行数,一眼识别哪次提交动得最多。











