vscode合并分支需先切换至目标分支再操作,否则merge from无效;三栏合并编辑器需满足.git存在、git.mergeeditor启用等条件;accept both changes仅拼接代码不校验逻辑,关键融合须手动编辑中间区并彻底清除冲突标记,保存后必须git add和commit才算完成。

VSCode 合并分支本身不难,难的是冲突一来就卡在“该信哪边、删哪行、点哪个按钮”——尤其当 Accept Current Change 和 Accept Incoming Change 按钮长得一模一样,但实际效果完全相反时。
必须先切换到目标分支,否则 Merge from 不生效
很多人右键功能分支点了 Merge from 却没反应,根本原因是状态栏显示的不是目标分支。比如要把 feature/login 合进 main,你得先点击状态栏分支名 → 选 Checkout to main,再右键 feature/login → Merge from。
- 状态栏分支名弹出菜单里,“Checkout to” 是切换,“Merge from” 是发起合并,别点串
- 当前有未提交修改时,VSCode 会直接阻止切换分支:先
git stash或提交再操作 - 合并前建议手动运行
git fetch,否则远程分支列表可能滞后,导致选不到最新分支
三栏合并编辑器打不开?检查这几个硬性条件
VSCode 不是每次点开冲突文件都自动弹出三栏视图(Current / Incoming / Result),它需要同时满足:项目根目录已打开(含 .git)、git.mergeEditor 设置为 true、文件是文本而非二进制/LFS、且 Git 状态确实是 Unmerged paths。
- 验证方式:终端执行
git status,确认文件列在Unmerged paths下 - 打开设置(
Ctrl+,),搜git.mergeEditor,确保值为true(旧版默认关闭) - 最稳的打开方式:源代码管理视图(
Ctrl+Shift+G)→ 右键 Conflicted 文件 →Resolve in Merge Editor - 如果文件编码不是 UTF-8(比如含 GBK 中文注释),合并编辑器会拒绝加载
Accept Both Changes 不是“安全融合”,而是无脑拼接
这个按钮只是把左栏和右栏内容按顺序写进中间 Result 区,不做任何逻辑校验。它适合两边改的是完全无关的函数或配置项;一旦涉及共享变量、重复 import、条件覆盖,就极易翻车。
- 常见错误:两边都加了
import axios from 'axios'→ 合并后报重复 import 错误 - 两边都改了同一个对象的
config.timeout→ Result 区出现两行赋值,后者覆盖前者,但业务意图被掩盖 - 左边是
if (x > 0),右边是if (x >= 0)→ 拼接后变成两个独立 if 块,而不是取逻辑并集 - 真正需要融合的地方(如一个加字段校验、另一个改返回结构),必须手动编辑 Result 区,删掉全部
、<code>=======、>>>>> feature-x
保存 ≠ 解决,git add 这步不能跳
VSCode 在你点完 Accept Current Change 或手动删完标记并保存后,文件内容虽已更新,但 Git 状态仍卡在 MERGE_CONFLICT。它只管内容,不管暂存。
- 多个冲突文件全部处理完后,必须逐个在源代码管理视图中点击文件旁的
+号,或终端执行git add <file></file> - 用
Git: Accept All Current Changes批量处理整个文件的所有冲突块后,VSCode 依然不会自动git add - 所有冲突文件都
git add完毕后,还要点一次Commit Merge按钮(或终端git commit),否则合并没真正完成 - 误点
Discard Changes会清空整个文件的未暂存修改——包括你刚手动修好的部分,且无二次确认
最容易被忽略的其实是“冲突标记是否真的清干净了”:哪怕残留一行 =======,VSCode 就永远把你卡在 Conflicted 状态。用 Ctrl+F 搜 ,确认全无痕迹,再看源代码管理面板里文件是否从 <code>MERGE CHANGES 移入 Changes —— 那才算真过关。











