VSCode自带文件对比和合并功能完全够用,但需掌握触发方式(右键Select for Compare或快捷键)、限制条件(不自动刷新Git状态、不支持文件夹对比、Accept Both仅为简单拼接)及冲突处理要点(标记完整、编码UTF-8、手动git add)。

VSCode 自带的文件对比功能完全够用,不需要装插件,但必须知道触发方式和限制条件——比如它不自动刷新 Git 状态、不支持原生文件夹对比、也不校验你点的“Accept Both”是否逻辑合理。
右键 Select for Compare 是最稳的手动对比方式
这是纯本地操作,和 Git 无关,适合比配置文件、日志片段、临时脚本等任意两个文件。
- 右键第一个文件 →
Select for Compare,再右键第二个文件 →Compare with Selected - 快捷键更可靠:
Ctrl+Shift+P(Win/Linux)或Cmd+Shift+P(Mac),输入File: Compare Active File With,选目标文件 - 对比视图默认并排,左侧是当前活动文件,右侧是被比较文件;右侧若为只读(如
node_modules中的文件),仍可看差异,但无法编辑 - 别拖拽文件进窗口——容易误操作成移动;也别双击开两个文件再切标签,那样不会进入 diff 模式
Git 冲突时看不到 Accept 按钮?先检查冲突标记是否完整
VSCode 的合并按钮只在文件里存在标准 Git 标记时才激活:即 <<<<<< HEAD、=======、>>>>>> branch-name 这三行都得在,缺一不可。
- 如果没看到按钮,先打开文件搜
<<<<<<——有时 Git 已静默解决部分冲突,或你手抖删了标记行 - 确保
git.mergeEditor设置为true(VSCode 1.84+ 默认开启,老版本需手动打开) - 光标必须落在冲突块内,顶部按钮才会浮现;用
Ctrl+Shift+P输入Go to Next Conflict可快速定位,比滚屏找快得多 - 如果文件编码不是 UTF-8(比如含 GBK 中文注释),合并编辑器可能直接拒绝加载,此时需先转码
Accept Both Changes 不是智能融合,而是简单拼接
这个按钮只是把 Current 和 Incoming 两段代码按顺序上下堆叠,不做任何结构分析或语义判断。
- 常见翻车:两边都加了
import axios from 'axios',点完就报重复导入 - 两边都改了同一个对象字段,比如
config.timeout = 5000和config.timeout = 10000,中间区会出两行赋值,后者覆盖前者,但意图全丢 - 真正需要“融合”的地方(如一个加校验、一个改返回结构),必须手动编辑中间面板,删掉所有
<<<<<</=======/>>>>>>标记,否则git add会失败,提示fatal: cannot lock ref - 点完 Accept 操作后,VSCode 不会自动运行语法检查或测试,得你自己确认格式是否合法、逻辑是否自洽
合并后必须手动 git add,VSCode 不会替你提交状态
这是最常被跳过的一步:VSCode 改完内容就停在那里,Git 状态仍是 unmerged,下次打开该文件也不会再次提示冲突。
- 解决完所有冲突后,在源代码管理视图中,逐个点击冲突文件旁的
+(Stage Changes) - 或者终端执行
git add <file>;多个文件可批量git add .,但要小心误加 - 全部 Stage 后,底部状态栏显示
All changes staged for commit,这时才能安全点 Commit 按钮 - 如果用了
Git: Accept All Current Changes一键处理整个文件,依然要走这一步——VSCode 只改内容,不更新索引
真正容易被忽略的是:VSCode 的合并编辑器只负责呈现和搬运,不负责理解。它把两段代码摊开给你看,但哪段该留、哪段该改、有没有第三种写法,全靠你人工判断。别让“点按钮”的便利,掩盖了读代码的必要性。


















