VSCode中Git冲突是Git主动暂停并等待用户决策,它保留双方修改并用<<<<<<< HEAD、=======、>>>>>>> branch-name三行标记框出冲突区域,用户可选择、删除或拼接代码后通过git add告知Git已解决。

VSCode 里 Git 冲突不是报错,是 Git 主动“暂停”并等你拍板——它把双方修改都保留在文件里,用三行标记框出来,你选、你删、你拼,然后告诉 Git:“好了,就按这个存。”
冲突文件里看到的
那是 Git 自动生成的标准分隔标记,每个冲突块都由三部分组成:<<<< HEAD(你当前分支的修改)、=======(分隔线)、>>>>> branch-name(对方分支的改动)。VSCode 会高亮整块,并在左侧边栏标红感叹号。
常见错误现象:
- 误以为这是“垃圾代码”,直接全删——结果丢掉两边逻辑
- 只删了
>>>>>没删<<<<和=======——Git 仍认为冲突未解决 - 文件里有多个冲突块,只处理了第一个,后面漏掉——
git commit依然被拦住
点 Accept Current Change 没反应?检查这三件事
这个按钮只在光标落在某个冲突块内部时才生效,且只作用于当前块。它会把 <<<< HEAD 到 >>>>> 之间的全部内容替换成你选的那一侧,并自动删掉三行标记。
但容易踩的坑:
- 光标没停在冲突块里(比如停在空行或注释行),按钮根本不显示
- RESULT 栏已手动编辑过,再点按钮会**完全覆盖**中间内容,不合并也不警告
- 点了按钮但没保存文件 → VSCode 不触发
git add,状态仍是 unmerged
为什么 Merge Editor 打不开或不自动弹出
VSCode 的三路合并编辑器(CURRENT / INCOMING / RESULT)不会自动启动,必须满足四个前提:
-
git.mergeEditor设置为true(新版默认开启,旧版可能关着) - 当前工作区根目录下存在
.git文件夹(否则 Git 扩展不初始化) - 文件是纯文本(
.png、.pdf、LFS 跟踪文件不支持) -
git status真实返回Unmerged paths(手动删过标记但没git add,VSCode 缓存可能滞后)
最稳打开方式:按 Ctrl+Shift+P → 输入 Git: Open Merge Editor → 回车。它会自动定位到当前文件首个冲突块。
解决完还 push 不上去?别跳过 git add
VSCode UI 上点了 Accept、删了标记、保存了文件,只是改了工作区内容。Git 还不知道你“决定好了”。必须显式暂存:
- 在源代码管理视图(
Ctrl+Shift+G)里找到该文件,点击旁边的+号 - 或终端执行
git add path/to/file.ts
只有所有冲突文件都被 git add 后,git commit 才能通过,VSCode 底部的 MERGING 状态才会消失。漏一个,整个合并流程就卡死——这不是界面 Bug,是 Git 本身的强一致性要求。


















