vscode 1.84+ 默认启用 git.mergeeditor,但 file: compare active file with 命令始终是纯文件路径比对,不依赖 git 状态;老版本需手动开启 git.mergeeditor 才能支持 git 冲突合并按钮,而该命令本身在所有版本中行为一致——只要两个文件已保存且有有效 uri,即可触发 diff 视图。

Compare Active File With 命令在不同版本中的行为差异
VSCode 1.84+ 默认启用 git.mergeEditor,但 File: Compare Active File With 命令本身不依赖 Git 状态,它始终是纯文件路径比对——无论你用的是 1.72 还是 1.90,只要两个文件都已保存,该命令就能触发 diff 视图。唯一关键区别在于:老版本(git.mergeEditor,Git 冲突块内就不会显示“Accept”按钮,而这个设置和 File: Compare Active File With 无关,只影响合并编辑器。
- VSCode 1.80 及之前:必须在
settings.json中显式写入"git.mergeEditor": true,否则冲突文件里看不到接受按钮 - VSCode 1.84+:默认开启,但若你在设置中手动关掉,同样不显示按钮
- 所有版本中,
File: Compare Active File With都不读取 Git 配置,也不校验分支状态;它只认文件路径和内容
Ctrl+K Ctrl+D 和 Ctrl+Shift+P 的触发时机与限制
Ctrl+K Ctrl+D 是唯一专用于「当前编辑内容 vs 磁盘已保存版本」的快捷键,它不要求文件被 Git 跟踪,但要求该文件**至少保存过一次**。如果文件从未保存(比如新建 tab 粘贴代码后直接按这个快捷键),菜单项会灰掉,无法触发。
-
Ctrl+Shift+P输入File: Compare Active File With后选目标文件:支持跨工作区、跨磁盘路径,但目标文件必须已存在且可读 -
Ctrl+Shift+P输入Git: Compare with Previous Revision:只对 Git 跟踪文件有效,且仅比对上一个 commit —— 如果文件刚被git add但还没 commit,这里会报 “No previous revision” -
Ctrl+K Ctrl+D不会自动刷新:外部工具(如脚本)改了磁盘文件,VSCode 不感知,需手动重按一次
Accept Both Changes 在各版本中都是简单拼接
这个按钮从 VSCode 1.70 到 1.90 行为完全一致:它不做任何 AST 解析或语义合并,就是把 Current 区域内容原样写入,再换行写 Incoming 区域内容。后果很直接——重复 import、字段赋值覆盖、逻辑断裂。
- 比如两边都改了
config.timeout,结果会生成两行赋值,后者生效,前者意图丢失 - 如果 Current 有
if (x) { ... },Incoming 有else { ... },点完就变if (x) { ... } else { ... }—— 看似合理,实则没做任何条件判断,只是字面拼接 - 真正需要融合的场景(如新增字段 + 修改返回结构),必须手动删掉所有
/ <code>=======/>>>>>> branch-name标记,再编辑中间区域
diffEditor.maxComputationTime 影响大文件对比可用性
VSCode 对大文件差异计算设了硬性超时,默认值是 5000ms(5 秒)。一旦单个文件超过这个阈值,对比视图会卡在 “Loading…” 或直接空白,不是卡死,而是主动放弃计算。
- 常见于日志片段、压缩 JSON、生成的 .d.ts 文件;即使文件只有 8MB,若含大量长行或嵌套结构,也可能触发超时
- 修改方式:在
settings.json中加"diffEditor.maxComputationTime": 10000,但别设太大,否则 UI 会假死 - 注意:该设置只对内置 diff 生效,不影响 Git CLI 的
git diff输出 - 真正大于 50MB 的文件,VSCode 会直接禁用 diff 按钮(变灰),此时只能靠
git diff --no-color或外部工具











