VSCode内置Diff功能通过右键“Select for Compare”和“Compare with Selected”触发,需确保文件在工作区且已真正打开;支持同步滚动、F7跳转差异、内联编辑等,Git对比时须分清Workspace/HEAD/Previous Version目标。

如何用 VSCode 内置 Diff 功能对比两个文件
VSCode 自带的 Compare Active File With... 功能足够应对绝大多数日常比对需求,不需要装插件、也不用切到终端。关键在于触发方式和路径选择——不是所有打开方式都能进 Diff 视图。
操作步骤很简单:
- 先在资源管理器中右键点击第一个文件 → 选
Select for Compare - 再右键点击第二个文件 → 选
Compare with Selected - 或者:两个文件都已打开 → 点击任一编辑器标签右键 →
Compare with [另一个文件名]
此时会自动进入左右分栏的 Diff 视图,支持逐行高亮、跳转变更、内联编辑(直接在右侧修改并保存)。
为什么右键菜单里找不到 Compare 选项
常见原因是文件没“真正打开”或不在工作区中。VSCode 的 Diff 功能依赖于文件 URI 的可识别性,临时预览(比如只点了一下没真正 focus 进编辑器)、未保存的 Untitled 文件、或通过命令行用 code file1.js file2.js 一次性打开但未显式加载到编辑器组,都会导致右键无 Compare 项。
解决办法:
- 确保两个文件都在左侧资源管理器中可见(即属于当前打开的文件夹/工作区)
- 每个文件至少被点击一次,让编辑器标签实际存在(哪怕只是空标签)
- 避免使用
code -r或多窗口模式下跨窗口比对——Diff 只支持同窗口内的文件
Diff 视图里怎么快速定位差异或同步滚动
默认开启同步滚动(Sync Scrolling),但容易被忽略的是它的开关位置和行为边界:
- 右上角三个点菜单 → 勾选/取消
Sync Scrolling,它控制的是“滚一个,另一个跟着动” -
F7跳到下一个差异,Shift+F7跳到上一个(注意不是F5) - 点击左侧或右侧的 + 号可展开被折叠的相同段落(尤其在大文件中很有用)
- 右键某一行差异 → 可选
Copy Line From Left/Right,直接复制对应侧内容
注意:如果某侧文件是只读(比如来自 Git 提交记录),右侧编辑区会灰显且不可编辑,但依然能复制、跳转、折叠。
对比 Git 历史版本时的常见陷阱
从源代码管理面板点某个 commit 后,右键文件选 Compare with Workspace 是最常用路径,但这里有几个隐含逻辑:
- 对比的是“该 commit 中该文件的内容” vs “当前工作区该文件的内容”,不是和上一个 commit 比
- 如果当前文件已修改但未暂存,
Compare with Workspace实际对比的是“commit 版本” vs “你改过的脏版本” - 想看本次修改到底改了啥?应该右键 →
Compare with HEAD(即暂存区)或Compare with Previous Version(上一个 commit) - 误删了一段代码又不确定改前长什么样?用
Compare with Previous Version比Staged Changes更可靠,因为后者可能还没 add
Diff 看起来简单,但真正卡住人的往往不是功能不会用,而是没意识到 VSCode 把“工作区 / 暂存区 / HEAD / 某个 commit”当成了不同实体来对待——选错目标,比出来的就不是你想看的差异。


















