VSCode未显示三方视图是因未满足触发条件:文件未被Git标记为Unmerged paths、git.mergeEditor未设为true、未打开含.git的项目根目录、文件为二进制/LFS/子模块,或手动删冲突标记后未执行git add。

为什么点开冲突文件没看到三方视图
不是 VSCode 失效,而是它压根没进入三方合并编辑器模式。关键前提是:Git 必须把文件标记为 Unmerged paths,且 git.mergeEditor 为 true。常见卡点包括:
-
git.mergeEditor在设置里被设为false(旧版默认值或手动关闭过) - 当前工作区没打开含
.git的项目根目录,Git 扩展无法初始化 - 文件是二进制、Git LFS 跟踪资源或子模块——VSCode 不渲染三栏
- 你手动删了
<<<< HEAD等标记但没运行git add,Git 缓存仍认为是未解决状态,VSCode 跳过加载
验证方式很简单:终端执行 git status,确认目标文件明确列在 Unmerged paths 下;再按 Ctrl+Shift+P 输入 Git: Open Merge Editor —— 如果命令可用且能点开,说明环境没问题。
怎么强制打开三方视图并准确定位冲突块
双击文件名 ≠ 自动激活三方视图。最稳的三条路径是:
- 在源代码管理视图(
Ctrl+Shift+G)里找到标为Conflicted的文件,右键 → 选Resolve in Merge Editor - 打开冲突文件后,把光标停在任意一个
<<<< HEAD包围的块内,顶部会浮现提示条,点击Open in Merge Editor - 按
Ctrl+Shift+P→ 输入Git: Open Merge Editor→ 回车(它会自动定位到当前活动文件的首个冲突)
打开后注意三栏结构:CURRENT 是你本地分支的修改(rebase 时≠HEAD),INCOMING 是对方分支的改动,中间 RESULT 可编辑。灰色背景行是双方都未动的公共上下文,不能删;红/绿边框只是差异提示,不等于“必须处理”。
Accept Current Change 和 Accept Incoming Change 到底改哪边
按钮文字容易误导,但逻辑严格对齐 Git 命令行:
-
Accept Current Change= 把CURRENT栏内容写入RESULT,并**自动删除当前光标所在冲突块的全部标记行**(<<<< HEAD、=======、>>>> branch-name) -
Accept Incoming Change= 把INCOMING栏内容写入RESULT,同样自动删标记 - 只作用于**当前光标所在的那一个冲突块**,多个冲突得逐个点,或改用
Git: Accept All Current Changes - 如果
RESULT区已有手写内容,点击按钮会**完全覆盖**,不合并也不提示
注意:CURRENT 不一定等于 HEAD。比如你在 git rebase 过程中,CURRENT 实际对应的是待重放的提交,不是工作区最新 HEAD。
解决完为什么还显示 Conflicted?关键遗漏步骤
VSCode 改了 RESULT 内容,不代表 Git 认为冲突已解决。必须手动 git add <file> 或在源代码管理面板里点该文件旁的 + 号暂存,否则状态一直卡在 MERGE_CONFLICT。
- 点了
Accept Both Changes却没删干净=======→ 文件仍被识别为冲突 - 手动编辑
RESULT后忘了保存 → VSCode 不会帮你git add - 批量用
Git: Accept All Current Changes后,VSCode 只改内容,不自动暂存
真正完成的标志是:源代码管理视图里该文件从 Conflicted 变成 Staged Changes,底部状态栏出现 All changes staged for commit。这一步漏掉,就等于没解决。


















