最稳路径是打开源代码管理视图(ctrl+shift+g),展开commits区域,按住ctrl(win/linux)或cmd(macos)点击两个目标commit,右键任一选中项选择“compare commits”,先点的为左栏基准版,后点的为右栏对比版。

怎么比两个 commit 的差异(最稳路径)
直接在源代码管理侧边栏(Ctrl+Shift+G)里操作,别点错成“Compare with Working Tree”或“Compare with HEAD”——那不是你要的。真要比两个历史快照,必须选中两个 commit 后统一触发对比。
操作步骤:
- 打开源代码管理视图,展开
COMMITS区域 - 按住
Ctrl(Win/Linux)或Cmd(macOS),依次点击两个目标 commit(顺序决定左右:先点的是左栏,后点的是右栏) - 右键任一选中的 commit → 选
Compare Commits
常见错误:
- 点了
Compare with Branch or Tag却输错分支名(比如拼成mian),VSCode 静默失败,不报错也不出视图 - 目标文件在某个 commit 中被重命名或移动过,VSCode 不自动追踪,会显示
Binary files differ或整块红绿闪烁——这时得补查git log --follow -p path/to/file - 两个 commit 时间太近、改动极小(比如只改了一个空格),diff 视图可能看起来“没变化”,其实是被默认忽略空格了;点右上角 ⚙️ → 勾选
Ignore Whitespace再试
为什么点开是 Loading… 或空白
这不是 VSCode 卡,是 Git 数据根本没加载进来。90% 的情况,问题不在 UI,在仓库状态没对齐。
排查顺序:
- 终端进项目根目录,运行
git rev-parse --git-dir,确认输出是.git路径;否则 VSCode 根本不认为这是 Git 仓库 - 运行
git check-ignore -v some/file.ts,看是否被.gitignore拦截;被忽略的文件不会出现在 commit 历史里,自然比不出东西 - 检查编码:含 BOM 的 UTF-8 或混用 GBK/UTF-8 会导致
git show COMMIT:file输出乱码,VSCode diff 就加载失败;用git show HEAD:src/config.json | head -n 5在终端验证能否正常输出 - 如果用了
git worktree或符号链接,VSCode 可能识别不到正确的工作目录——看左下角状态栏有没有显示分支名;没有,就说明 Git 上下文没加载
Git: Compare with Revision 怎么用才不翻车
这个命令名字像万能钥匙,其实只认“能被 Git 定位到的版本标识”,不是所有字符串都行。
支持的输入格式:
- 完整 commit hash:
abc1234(前 7 位通常够用) - 带标签的版本:
v1.2.0或release/2026-q2 - 相对引用:
HEAD~2、main^(注意不能用origin/main,除非你已git fetch过)
容易踩的坑:
- 输
HEAD和输HEAD~1看起来差不多,但前者是“上一次提交”,后者是“上上次”,差一个 commit 就可能漏掉关键修改 - 命令面板里搜
Git: Compare with Revision时,别手快选成Git: Compare with Branch——后者只接受分支名,输 commit hash 会静默失败 - 执行后没反应?先确认当前编辑器里正开着你要比的那个文件;这个命令默认只比当前激活文件,不是全局比整个仓库
diff 视图里左边到底是不是“基准版”
很多人盯着右边改来改去,却忘了左边才是你心里那个“应该保留的版本”。但 VSCode 不保证左边永远是你想的“旧版”——它取决于你用什么方式触发对比。
对照表:
-
Git: Open Changes→ 左:HEAD(上一次 commit),右:工作区 -
Compare Commits(Ctrl+多选)→ 左:先点的 commit,右:后点的 commit -
Git: Compare with Revision→ 左:当前工作区或 HEAD,右:你输的 revision(反直觉!)
所以每次打开 diff,第一件事是看顶部标题栏和左右栏文件路径,确认左边确实是你要当基准的那个版本。否则删错逻辑、覆盖掉刚加的修复,都是分分钟的事。











