必须手动触发:在源代码管理视图中右键冲突文件→选择“resolve in merge editor”,前提是git.mergeeditor为true、文件为utf-8纯文本且处于unmerged paths状态;否则仅显示内联标记。

怎么快速打开冲突文件的三栏编辑器
VSCode 默认不会自动弹出三栏合并视图(Current / Incoming / Result),必须手动触发,且依赖几个硬性条件同时满足:git.mergeEditor 设置为 true、文件是 UTF-8 编码纯文本、该文件确实在 Unmerged paths 状态。
最稳的操作路径是:在源代码管理视图中找到标红的冲突文件 → 右键 → 选择 Merge Editor: Open Merge Editor(不是“Open File”);如果菜单里没这个选项,说明当前文件不满足三栏视图前提,比如含 GBK 中文注释或未被 Git 标记为冲突状态。
别指望点击文件就自动进三栏——它只会以普通文本打开,显示 这类标记,没法直观比对。
冲突解决时真正有用的快捷键组合
VSCode 内置的冲突操作按钮(Accept Current / Incoming / Both)背后有对应快捷键,但默认不显示,需主动记忆:
-
Ctrl+Alt+1(Windows/Linux)或Cmd+Option+1(macOS)→ Accept Current Change(保留当前分支内容) -
Ctrl+Alt+2或Cmd+Option+2→ Accept Incoming Change(采用待合并分支内容) -
Ctrl+Alt+3或Cmd+Option+3→ Accept Both Changes(危险!仅拼接,不校验逻辑)
这些快捷键只在冲突文件的编辑器中有效,且光标必须落在冲突区块内(即两行分隔符之间)。按完后内容会直接写入中间 Result 区,但不会自动保存,更不会 git add —— 这一步必须手动完成。
为什么 Accept Both Changes 总是出问题
Accept Both Changes 不是“智能融合”,而是机械拼接:左边代码 + 右边代码,中间用空行隔开。它完全忽略语义,常见翻车点包括:
- 两边都写了
import React from 'react'→ 合并后重复导入,ESLint 报错 - 同一行配置都被修改,比如
timeout: 5000和timeout: 10000→ 结果区出现两行,后者覆盖前者但意图丢失 - 一个分支删了
if (loading) return null,另一个分支在内部加了新逻辑 → 拼接后语法结构断裂
真正需要融合的地方(比如字段校验 + 接口返回结构调整),必须手动编辑 Result 区,删掉所有 、<code>=======、>>>>> feature/x 行,重写逻辑,再保存。
冲突解决后最关键的遗漏动作
很多人点了 Accept Current Change 或手动改完 Result 区就以为万事大吉,结果 git status 依然显示 “unmerged paths”,git commit 提示 “no changes added to commit”。原因只有一个:VSCode 不会自动执行 git add。
必须做两件事:
- 保存冲突文件(
Ctrl+S) - 在源代码管理视图中,点击该文件旁的
+按钮,或右键 →Stage Changes,或终端运行git add <file></file>
没走完这步,就永远卡在“已解决但未暂存”状态,后续 git commit 会失败。这是 2026 年仍被高频踩中的坑,尤其在快速操作时容易跳过。











