直接打开“工作区 vs 暂存区”差异视图需用命令面板执行 Git: Compare Working Tree with Index,而非 Ctrl+Shift+D;该命令明确对比暂存区(左)与已保存的工作区(右),要求文件已 git add、已保存且 VSCode 以含 .git 的目录为根打开。

怎么直接打开“工作区 vs 暂存区”差异视图
必须用命令面板触发,不能依赖 Ctrl+Shift+D ——它只开源代码管理面板,不打开 diff。真正可靠的方式是:Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS),输入 Git: Compare Working Tree with Index 并执行。
这个命令明确指定对比对象:左侧是暂存区(index),右侧是当前已保存的工作区(working tree)。如果当前编辑器没打开目标文件,它会弹出文件选择器,且只列出已修改且已 git add 的文件。
- 若文件未保存,该命令仍会执行,但右侧显示的是内存缓存内容,diff 高亮可能失效;务必先按
Ctrl+S再运行 - 右键菜单里的
Open Changes不推荐——焦点不在文件上时会报错“无法为未打开的文件执行此操作” -
Git: Open Changes实际对比的是工作区 vs HEAD,不是暂存区,容易混淆
为什么点“STAGED CHANGES”里的文件却看不到高亮差异
最常见原因是文件没保存,或者你点错了区域。VSCode 在“未暂存更改”里点文件,默认对比的是“工作区内存缓存 vs 磁盘文件”,不是“工作区 vs 暂存区”。
- 确认左下角状态栏显示分支名(如
main),否则说明当前工作区根目录下没有.git文件夹,或 VSCode 没以该目录为根打开 - 新创建的文件未执行
git add前,只会出现在“CHANGES”区域;只有出现在“STAGED CHANGES”里,才表示已暂存,点击后才走正确对比逻辑 - 检查右上角是否误启用了“Split Editor”,导致 diff 被挤到另一个编辑器组里,看不见高亮
- 如果开了
editor.formatOnSave(如 Prettier),保存瞬间触发格式化再保存,可能让 VSCode 误判 diff 状态;临时关闭验证是否是该原因
如何在差异视图里精准暂存部分修改
VSCode 的差异编辑器支持逐块暂存,这是控制提交粒度的关键能力。进入 Git: Compare Working Tree with Index 视图后,绿色新增块上方有 +,红色删除块上方有 -。
- 点击
+把该段新增内容加入暂存区;点击-把对应删除动作暂存(即确认删掉这部分) - 行号左侧出现的
>箭头,点击后将右侧改动复制到左侧——等效于对该块执行git add -p - Alt+Click 可折叠大段差异,方便聚焦局部逻辑;
Ctrl+Enter提交当前所有已暂存内容 - 注意:左侧(暂存区)默认只读,你只能改右侧(工作区);保存后写回磁盘文件,不影响暂存区内容
修复“对比全量内容、没 +/- 符号、右侧空白”的典型现象
这不是 bug,而是 VSCode 对比上下文判断失准的表现。核心问题通常落在“对比源”和“文件状态”两个维度上。
- 先看左下角有没有分支标识;没有就 cd 到含
.git的目录,用 VSCode 重新打开该文件夹 - 执行
git status确认目标文件确实在 “staged changes” 列表里;如果只是修改未add,那它根本不在暂存区对比路径中 - 如果文件刚被格式化插件重写过,尝试关掉
editor.formatOnSave,手动保存一次,再运行Git: Compare Working Tree with Index - 某些语言服务(如 TypeScript Server)延迟加载时,diff 高亮可能滞后;等待几秒或重启 TS 服务(
Ctrl+Shift+P→TypeScript: Restart TS server)
真正的暂存区审查依赖三个确定性条件:Git 仓库存在、文件已暂存、文件已保存。缺一不可,少一个就会降级为其他对比模式,结果自然不准。


















