按Ctrl+Shift+D打开源代码管理视图,点击未暂存文件右侧…→Compare with Saved可查看工作区与磁盘文件diff;暂存后需选Compare with HEAD才能看到暂存区与HEAD的差异;语义diff默认忽略格式变化,右键可关闭;任意两文件diff需资源管理器多选后右键Compare。

如何在VSCode中快速打开当前文件的未提交修改diff
直接按 Ctrl+Shift+D(Windows/Linux)或 Cmd+Shift+D(macOS)打开「源代码管理」视图,找到当前已修改但未暂存的文件,点击它右侧的 ... → 选择 Compare with Saved。这个操作会立即在新编辑器标签中打开左右分栏diff视图,左边是磁盘上保存的内容,右边是当前编辑缓冲区内容。
注意:如果文件从未保存过(即没有对应磁盘文件),Compare with Saved 会灰显不可用;此时只能用 Compare with Clipboard 或先保存再比较。
git暂存后想看「已暂存 vs 最近commit」的diff怎么办
暂存(stage)后的文件在源代码管理面板里会移到「STAGED CHANGES」区域。点击该区域下的文件,右键菜单里会出现 Compare with HEAD —— 这才是查看「已暂存内容 vs 上一次commit」的正确入口。误点 Compare with Working Tree 会得到空diff(因为暂存区和工作区此时一致)。
常见误区:
-
Compare with Working Tree是「暂存区 vs 当前编辑器内容」,仅当文件被暂存后又继续改了才有效 -
Compare with HEAD才是真正对应git diff --cached的行为 - 如果没做任何暂存,这两个选项实际效果相同(都等价于
git diff)
diff视图里为什么有些行显示灰色、有些带+/-但不标颜色
VSCode默认使用「语法感知diff」(semantic diff),会对JS/TS/Python等语言跳过空白、注释、格式差异,只高亮语义变更。这会导致:
- 纯空格/换行改动不标红绿,仅显示为灰色小字(如
·表示空格) - 函数重命名但调用处没改,可能整块被当作「结构移动」而折叠
- JSON或YAML里字段顺序调整,默认不触发变更标记
若需严格按字节对比(比如检查配置文件格式、生成代码、二进制文本),右键diff编辑器 → Toggle Semantic Diff 关闭即可。关闭后所有字符级增删都会以标准+/-形式呈现,且支持复制原始diff patch。
如何一键对比两个任意本地文件(非git项目)
VSCode原生不提供「任意两文件diff」的快捷命令,但有稳定可行路径:
- 在资源管理器中 按住 Ctrl(Win)或 Cmd(Mac) 多选两个文件 → 右键 →
Select for Compare - 再选中第二个文件 → 右键 →
Compare with Selected - 或者拖拽一个文件到另一个已打开的编辑器标签上,松手时出现「Compare」提示
注意:File: Compare Active File With... 命令(可通过 Ctrl+Shift+P 调出)只支持从打开的编辑器列表中选,无法浏览未打开文件;所以对临时比对,多选方式更直接。
diff功能本身简单,但 VSCode 把「未保存/已保存/已暂存/HEAD」四层状态混在一个界面里,且右键菜单项名称高度相似。最容易出错的是在暂存后误用 Compare with Working Tree 而不是 Compare with HEAD,结果以为没改,其实改动早已进入暂存区。


















