VS Code 不支持交互式三路合并,需通过 Git 集成实现:用 Git: Compare Working Tree with HEAD 查看待提交差异,冲突时用 Git: Open Changes 进入三栏合并视图(CURRENT/INCOMING/BASE)并点击按钮接受变更。

VS Code 的文件比较功能本身不支持交互式三路合并(如 Git GUI 或 Beyond Compare 那样的手动逐块选择保留哪边),它只做「只读对比」——你看到差异,但不能直接点击“接受左边”或“合并此行”。真要合并代码差异,得靠 Git 集成 + 正确触发方式,而不是靠打开两个文件按 Ctrl+Shift+P 然后搜 “compare”。
用 Git: Compare Working Tree with HEAD 看真实待提交差异
很多人误以为“右键 → Compare with Saved”就能模拟 Git 合并场景,其实那是纯文件比对,和 Git 分支/暂存区完全无关。真正反映“哪些改动需要被合并”的,是工作区与当前 HEAD 的差异:
- 确保已初始化 Git 仓库(
.git目录存在) - 打开命令面板(
Ctrl+Shift+P/Cmd+Shift+P),输入并选择Git: Compare Working Tree with HEAD - 此时左侧是当前未暂存的修改,右侧是上一次 commit 的内容 —— 这才是你要决定是否保留的“差异”
- 若想对比暂存区(staged)和 HEAD,选
Git: Compare Index with HEAD
合并冲突时,必须用 Git: Open Changes 而不是手动打开两个文件
当执行 git merge 或 git pull 出现冲突,VS Code 不会自动弹出可操作的合并视图。你得主动唤出 Git 冲突专用界面:
- 点击左下角 Git 图标(分支名旁边那个小分支图标),或按
Ctrl+Shift+G - 在源代码管理面板顶部,点
Open Changes按钮(不是“Compare Files”) - 这时打开的编辑器会显示三栏:CURRENT(你的修改)、INCOMING(对方改动)、BASE(共同祖先)——这才是真正的合并上下文
- 每处冲突下方有“Accept Current Change”、“Accept Incoming Change”、“Accept Both Changes”等按钮,点即可写入结果
diff 命令行输出无法直接在 VS Code 里合并
有人习惯用 git diff branch-a branch-b 看差异,然后把输出重定向到文件再用 VS Code 打开。这会产生严重误导:
- 命令行
git diff输出的是 patch 文本,不是可编辑的源码快照 - VS Code 即使能语法高亮它,也无法识别冲突标记(
等)并提供合并按钮 - 想对比两个分支的真实代码差异,应该用
Git: Compare Branches命令(需先 checkout 其中一个分支) - 或者更稳妥:先
git checkout branch-a && git merge branch-b,让 Git 报冲突,再进 VS Code 处理
真正卡住人的从来不是“怎么打开对比”,而是没分清「文件差异」和「Git 合并上下文」的区别。只要一上来就手动打开两个 .ts 文件点右键 Compare,基本就走偏了——那只是看区别,不是在合并。










