vscode git冲突是git主动暂停合并并等待人工决策,表现为文件中插入> branch-name三行标记,夹住本地与对方分支互斥代码;需手动编辑、保存后执行git add暂存才能完成解决。

VSCode 里 Git 冲突不是报错,而是 Git 主动暂停合并、等你拍板——它会在文件里插三行标记:、<code>=======、>>>>> branch-name,中间夹着两段互斥的代码。点开文件看到这些,说明你已进入“人工仲裁”环节。
冲突文件在 VSCode 里长什么样
打开有冲突的文件,你会立刻看到:
到 <code>=======之间是**你本地分支的修改**(比如刚加的一行console.log('debug'))-
=======到>>>>> main(或别的分支名)之间是**对方分支的改动**(比如同一行被改成console.log('ready')) - 左侧装订栏对应行号旁会出现红色感叹号图标,光标停在冲突块内时,编辑器顶部会浮出浅灰色操作条
- VSCode 底部状态栏显示 “MERGING” 或 “1 merge conflict”,资源管理器中该文件名旁也有黄色 ⚠️
为什么点了 Accept Current Change 没反应
这不是按钮坏了,而是 VSCode 的“接受”动作只做两件事:把对应内容写进当前编辑区,并删掉那三行冲突标记——但它**不会自动暂存(git add)**,也不会帮你保存文件。常见卡点:
- 你点了按钮,但没按
Ctrl+S(Windows/Linux)或Cmd+S(macOS)保存文件 → 标记还在,Git 仍认为未解决 - 保存了,但没去源代码管理视图(
Ctrl+Shift+G)点文件旁的+号,或没运行git add path/to/file.ts→ 文件还在Unmerged paths状态 - 你改的是副本、符号链接路径,或工作区没打开含
.git的根目录 → VSCode Git 扩展压根没加载,按钮只是灰的 - 文件被
.gitattributes设为merge=ours或是二进制(.png/.pdf),VSCode 根本不渲染冲突块,连按钮都不会出现
怎么真正打开三栏 Merge Editor 而不是只看内联按钮
内联按钮适合单个简单冲突;多个嵌套、逻辑交叉的冲突,必须进三栏视图。但 VSCode 不会自动弹出它,得手动触发:
- 确认
git.statusBarVisibility和git.mergeEditor都是默认值(或显式设为true) - 终端执行
git status,确保目标文件明确列在Unmerged paths下(不是 justboth modified) - 在源代码管理视图(
Ctrl+Shift+G)里找到标为Conflicted的文件,右键 → Resolve in Merge Editor - 或打开文件后,光标停在任意一个
块内,顶部提示条点 <strong>Open in Merge Editor</strong> - 或按
Ctrl+Shift+P→ 输入Git: Open Merge Editor→ 回车(它会自动定位到当前文件首个冲突)
进去后注意:CURRENT 是你当前检出分支的版本(rebase 时 ≠ HEAD),INCOMING 是正要合入的分支,RESULT 可直接编辑——删标记、调顺序、补逻辑都行,但灰色公共上下文别动。
解决完还 push 不上去?检查这三处
点完所有 Accept、保存、甚至看到状态栏“MERGING”消失了,push 还被拒?大概率卡在这三个地方:
-
漏文件:
git status输出里还有其他Unmerged paths,VSCode 源代码管理面板的 “Merge Changes” 区域没清空,就说明至少一个文件没git add - 标记没删干净:手改时只删了
和 <code>>>>>> feature/login,但忘了删中间的=======→ Git 仍识别为冲突 -
环境错位:你在 WSL 或 Remote-SSH 里开发,但 VSCode 设置里的
git.path指向 Windows 本机的 git.exe → UI 点了,实际 Git 索引没变,刷新后又回冲突态。查终端which git,和设置里一致才行
最稳验证方式:关掉所有标签页 → 终端跑 git status --short → 对每个 UU 文件,在资源管理器里重新打开 → 看底部有没有操作按钮 → 点完保存 → 回终端 git add → 再 git commit。工具再快,也绕不开 Git 索引和工作区的一致性。











