Ctrl+D 默认对比工作区与HEAD而非暂存区;需通过Git工具窗口→Staged Changes中右键“Compare with Working Tree”才能准确查看暂存区差异,且须确保文件已保存并启用行内差异高亮。

想看当前编辑器内容和 Git 暂存区(staged)的差异,不能直接按 Ctrl+D,那个默认比的是工作区 vs HEAD —— 你得手动切对比源。
为什么 Ctrl+D 不显示暂存区差异
这是最常卡住的地方:Ctrl+D(或 Cmd+D)在编辑器里触发的是「Show Diff」,默认目标是「当前文件 vs 最近一次 commit(HEAD)」,不是 vs 暂存区。哪怕你刚 git add 过,它也不会自动切换。
- 暂存区在 PhpStorm 里叫
Staged Changes,和Local Changes是两个独立视图 - Git tool window(
Alt+9)里 Commit 面板顶部有明确标签区分:「Staged Changes」和「Uncommitted Changes」 - 右键菜单里的「Compare with Revision」或「Compare with Working Tree」都指向不同目标,选错就白忙
正确入口:从 Git tool window 触发对比
必须通过 Git 工具窗口定位到已暂存的文件,再点对比 —— 这是唯一能确保对比源为暂存区的操作路径。
- 打开 Git tool window(
Alt+9),切到Commit标签页 - 在
Staged Changes区域找到你要查的文件,右键 →Compare with Working Tree - 此时左窗格是暂存区内容(只读),右窗格是你当前编辑器里保存后的最新内容
- 如果右窗格还是空的,说明文件没保存 —— PhpStorm 的 diff 引擎只读磁盘文件,未保存的带 * 标签页不会参与比对
对比窗口里怎么看清“到底加了哪几个字符”
默认开启的是行级差异(line diff),哪怕只多了一个空格,整行都会标红/绿。要定位到具体字符,必须开行内差异(inline diff)。
立即学习“PHP免费学习笔记(深入)”;
- 进入 Diff 窗口后,点右上角齿轮图标 → 勾选
Highlight differences inside lines - 或者用快捷键:
Ctrl+Shift+Alt+D(Windows/Linux)或Cmd+Shift+Option+D(macOS) - 这个设置不记忆 —— 每次新开 Diff 窗口都得重开一次
- 如果仍看不到字符级高亮,检查
Settings → Editor → Color Scheme → Diff & Merge,确认Modified颜色不是透明或与背景同色
容易被忽略的关键点
Git 暂存区状态不是实时监听的:PhpStorm 依赖 Git 的 index 文件,而不是文件系统修改时间。你改完代码但没 git add,或者 git add 后又改了但没再 add,Diff 窗口显示的内容就和你以为的不一样。
真正影响判断的,从来不是怎么点菜单,而是你心里清楚此刻 Git index 里到底锁定了哪一版 —— 尤其在反复 add/restore 场景下,别信直觉,先看 Git tool window 里 Staged Changes 列表是否为空、是否含目标文件。


















