vscode内置git差异比对无需插件,但需分清视图语义:“compare with saved”仅比对未保存修改与磁盘文件,不涉及git;git面板(ctrl+shift+g)显示真实git变更,右侧对比为head vs 工作区;分支对比用“git: compare branches”命令,执行git diff a...b三点语法。

VSCode 看 Git 差异比对,不需要额外安装插件就能开箱即用,但必须理解不同视图对应的不同对比语义——用错视图,看到的“差异”根本不是你想查的。
“Compare with Saved”只对比未保存修改,不是 Git 差异
这是最常被误用的入口。它只比较当前编辑器内容和磁盘上最后一次 save 的版本,完全不涉及 Git 提交历史或暂存区。
- 文件从未保存过 → 该选项灰色不可用(不是 bug)
- 已
git add但没git commit→ 它仍只比对“上次保存”和“当前编辑”,忽略暂存状态 - 右下角显示编码为
GBK,而另一份是UTF-8→ 行错位、大量误标红色/绿色,实际没改 - 想快速确认“我刚改的几行有没有手抖删错”,这个视图够用;想确认“这次提交到底改了哪些文件”,它完全不适用
Git 面板里的文件列表才是真正的 Git 变更源
打开 Ctrl+Shift+G 进入源代码管理视图,顶部列出的文件就是 Git 认为“有变更”的文件,颜色含义固定:
-
绿色:工作区新增(未git add)或已暂存的新建文件 -
红色:工作区删除(未git add)或已暂存的删除 -
灰色:已暂存(git add过),但还没git commit - 点击任一文件,右侧打开的对比视图左侧是
HEAD(上一提交),右侧是工作区 —— 这才是 Git 意义上的“当前修改”
“Git: Compare Branches”才是分支级差异的正确入口
命令面板输入 Git: Compare Branches(快捷键 Ctrl+Shift+P),选两个分支后,VSCode 会拉取它们的共同祖先,计算出所有差异文件并列出。
- 它背后执行的是
git diff branch-A...branch-B(三点语法),不是..,能排除共通提交干扰 - 结果里点开任意文件,对比视图左侧是
branch-A对应版本,右侧是branch-B对应版本,可逐行审查 - 如果目标分支没出现在列表里,先
git fetch同步远程分支信息,否则 VSCode 不知道它存在 - 不推荐直接在终端敲
git diff main feature/login --name-only再手动打开文件 —— 效率低,且丢失上下文高亮和一键应用能力
diff 视图颜色看不清?优先调背景透明度,别碰语法高亮
默认的 diffEditor.insertedTextBackground 和 diffEditor.removedTextBackground 是半透明色,但部分主题可能覆盖掉。改前先确认你没开 files.ignoreTrimWhitespace(它会让空格变化不显示,导致“内容一样却标红”)。
- 在
settings.json中加这段即可增强可读性:{ "workbench.colorCustomizations": { "diffEditor.insertedTextBackground": "#a3e63540", "diffEditor.removedTextBackground": "#f8717140" } } - 颜色值末尾两位
40是透明度,太浓会盖住语法高亮,太淡又看不出差异 - 不要动
diffEditor.insertedTextForeground这类前景色 —— 它会强制覆盖语言语法着色,反而降低可读性
真正卡住人的从来不是“怎么打开对比”,而是分不清“比的是哪两个快照”。Git 的 HEAD、暂存区、工作区、不同分支,每个组合对应一个语义明确的对比场景。选错起点,后面所有操作都是在验证一个错误前提。











