VSCode默认以左右分栏并排显示两文件差异,左为当前活动文件、右为目标文件;可通过右键“Select for Compare”再“Compare with Selected”,或命令面板执行“File: Compare Active File With”精准控制源/目标位置,避免拖拽误操作。

怎么让两个文件并排显示差异
VSCode 默认用左右分栏展示对比结果,左为当前活动文件,右为目标文件。这个布局不能手动改成上下,但能通过拖拽标签或快捷键控制哪边是“源”哪边是“目标”。
- 右键文件 →
Select for Compare,再右键另一个 →Compare with Selected,顺序决定左右位置 - 更稳妥的方式是先打开一个文件,按
Ctrl+Shift+P(macOS 为Cmd+Shift+P),输入File: Compare Active File With...,再选目标——这样不会误操作成移动文件 - 如果右侧文件是只读的(比如来自
node_modules或已提交的 Git 版本),你依然能看差异,但箭头按钮会灰掉,无法直接合并
合并更改时哪些快捷键真正有用
光靠鼠标点箭头太慢,尤其当差异块多的时候。VSCode 提供了几个被低估但高频实用的快捷键:
-
Ctrl+Enter(macOS:Cmd+Enter):把右侧改动复制到左侧(即“接受传入更改”) -
Ctrl+Alt+Enter(macOS:Cmd+Option+Enter):把左侧改动复制到右侧(“接受当前更改”) -
→和←:在差异块之间跳转,比鼠标滚屏快得多 -
Esc:退出当前差异块的聚焦状态,避免误触合并
注意:Ctrl+Enter 只作用于当前光标所在的差异块,不是整页;如果想批量操作,得先用多光标选中多个块(Ctrl+Click),再统一按快捷键。
为什么有时候箭头按钮不出现或点不动
这不是 Bug,而是 VSCode 对编辑权限和文件状态的显式保护。常见原因有三个:
- 目标文件是只读的(如 Git HEAD 版本、
.git/下的文件、系统库路径)——此时只能看,不能改 - 当前文件未保存,且对比的是磁盘版本(比如右键选了
Compare with Saved),VSCode 会禁用写入操作,防止覆盖未存内容 - 对比的是两个未加入 Git 的临时文件,或者其中一个根本没路径(比如粘贴生成的 untitled 文件),合并逻辑无法绑定到具体文件系统位置
遇到这种情况,先保存当前文件,或右键选择 Compare with Clipboard / Compare with HEAD 等明确有上下文的选项,比硬点灰色按钮更可靠。
Git 冲突里“Compare Changes”打开的三栏视图是怎么回事
VSCode 原生没有独立三路合并界面,但点击冲突块里的 Compare Changes 按钮后,它会拉起一个模拟三路合并的视图:左=当前分支(YOUR),中=共同祖先(BASE),右=传入分支(THEIRS)。这其实是临时构造的只读对比,不是真正的三路 diff 工具。
- 中间栏不可编辑,仅作参考,帮你判断哪段逻辑更合理
- 左右两栏仍支持
Ctrl+Enter/Ctrl+Alt+Enter向中间同步,但实际生效的是你最终写回主文件的内容 - 关闭该视图后,必须手动执行
git add <file>,否则 VSCode 不会帮你标记冲突已解决
真正容易被忽略的是:这个三栏视图不记录你做过什么选择,也不会自动帮你补全缺失的 <<<<<< HEAD 和 >>>>>> branch-name 标记——删掉它们之前,得确认所有冲突块都处理完了,否则 Git 仍认为文件处于冲突状态。


















