最常用方式是在源代码管理面板(ctrl+shift+g)中点击已修改文件,自动打开diff视图,左侧为head(上一commit),右侧为工作区内容;若显示“no changes”,需确认文件是否已git add,或使用git: compare with previous revision命令。

VSCode 的代码对比功能不是“看一眼就行”的辅助工具,而是必须对齐 Git 状态、选对入口、避开默认陷阱才能真正生效的调试链路。90% 的“看不出差异”“卡 Loading”“比错了版本”,问题不在功能本身,而在操作路径没走对。
怎么比当前文件和上一个 commit
最常用也最容易出错的场景:你改了 utils.ts,想立刻看到改了哪几行。
- 确保项目根目录下有
.git文件夹,且左下角状态栏显示分支名(如main) - 在源代码管理面板(
Ctrl+Shift+G)的“更改”列表中点击该文件 → 自动打开 diff,左侧是 HEAD(上一 commit),右侧是工作区内容 - 如果显示 “No changes”,先运行
git status确认文件是否已git add;新建未跟踪文件不会出现在此视图 - 快捷键
Ctrl+Shift+P→ 输入Git: Compare with Previous Revision效果相同,但不依赖鼠标点击
怎么比两个任意 commit 里的同一个文件
比如你想确认 feat/auth 分支合并前 vs 合并后,auth.service.ts 具体删了哪段逻辑。
- 打开源代码管理侧边栏 → 展开
COMMITS区域 → 按住Ctrl(Win/Linux)或Cmd(macOS)点选两个 commit - 右键 →
Compare Commits→ 在弹出的文件列表中找到目标文件并点击 - 注意:
Compare with Working Tree是跟当前未暂存内容比,Compare with HEAD才是跟最近一次 commit 比——菜单名太近,点错就白忙 - 如果文件在某次 commit 中被重命名或移动,VSCode 不会自动关联,可能显示 “Binary files differ”,此时需用
git log --follow -p auth.service.ts辅助定位
为什么 diff 卡在 “Loading…” 或空白
这不是 VSCode 卡死,而是 Git 数据加载失败的明确信号。
- 终端进项目根目录,运行
git rev-parse --git-dir,确认返回.git路径;若报错,说明没在 Git 仓库里 - 运行
git check-ignore -v src/config.json,若输出匹配规则,该文件被.gitignore排除,自然不在提交历史中 - 检查编码一致性:状态栏点击编码标识(如
UTF-8)→Reopen with Encoding统一两边格式,BOM 差异会导致首行全红 - 大文件(>50MB)可能触发
diffEditor.maxComputationTime限制,可在设置里调高该值
怎么手动对比两个磁盘文件(不走 Git)
比如比 config.prod.json 和 config.dev.json,或者临时校验生成的模板文件。
- 资源管理器中按住
Ctrl多选两个文件 → 右键 →Compare Files(不是 “Open to the Side”) - 或
Ctrl+Shift+P→ 输入File: Compare Active File With→ 从列表选另一个文件 - 误点成 “Open to the Side” 就只是并排看,没触发 diff;真对比视图顶部一定有 “DIFF” 标识
- 支持任意文本文件,但不支持文件夹;如需比目录结构,得用扩展如
Compare Folders
真正容易被忽略的是:diff 视图里灰色背景行表示被删除,绿色是新增,黄色是修改——但这些颜色只反映行级变化,不识别语义。函数重命名+拆分这种重构,会表现为大面积删除+新增,而不是“改名”。这时候得结合 git blame 或 GitLens 的时间线视图交叉验证,不能只信 diff 颜色。











