VSCode合并分支的关键在于正确切换目标分支、及时fetch更新、使用三栏合并编辑器处理冲突、手动验证逻辑并完成add和commit。

VSCode 合并分支本身不难,难的是冲突出现时不知道该信哪边、删哪行、点哪个按钮——尤其当 Accept Current Change 和 Accept Incoming Change 看起来一模一样却指向完全相反的代码版本时。
合并前必须切换到目标分支
很多人卡在“点了 Merge from 却没反应”,其实是没先切到要合并进来的那个分支。比如要把 feature/login 合进 main,你得先确保状态栏显示的是 main,再右键 feature/login 选 “Merge from”。否则 VSCode 不会触发合并流程。
- 状态栏分支名点击后弹出的菜单里,“Checkout to” 是切换,“Merge from” 是发起合并,别点串
- 如果当前有未提交修改,VSCode 会直接阻止切换分支,先
git stash或提交再操作 - 合并前建议手动运行
git fetch,否则远程分支列表可能滞后,导致选不到最新分支
冲突文件打开后看不到三栏视图?检查设置
默认的内联按钮(Accept Current Change 等)只在光标进入冲突块时才浮现在顶部,但如果你习惯用键盘导航或快速跳转,很容易错过。更稳的方式是强制调出三栏合并编辑器。
- 打开冲突文件后,按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS) - 输入
Git: Open Merge Editor并回车,立刻进入左右对比 + 中间编辑区的三栏界面 - 确保设置里
git.mergeEditor为true,否则命令可能不可用 - 若仍失败,检查文件编码是否为 UTF-8;非 UTF-8 文件(如含 GBK 中文注释)会导致合并编辑器拒绝加载
Accept Both Changes 不等于“安全合并”
这个按钮只是把左右两段代码上下拼在一起,不做任何逻辑校验。函数重复声明、变量重定义、if 条件覆盖错位——全靠你自己肉眼盯。
- 常见翻车场景:两边都加了
import axios from 'axios',点完直接报错 - 两边都改了同一个对象的
config.timeout,结果中间区出现两行赋值,后者生效但前者意图被掩盖 - 真正需要“融合”的地方(比如一个加了字段校验、另一个改了返回结构),必须手动编辑中间区,不能依赖按钮
- 保存前务必运行本地测试或至少语法检查,VSCode 不会替你判断业务逻辑是否自洽
批量解决冲突时最易忽略的一步
当你用 Git: Accept All Current Changes 一键处理整个文件的所有冲突块后,VSCode 并不会自动 git add。它只改了文件内容,状态仍卡在 “MERGE_CONFLICT”。
- 必须手动在源代码管理视图中点击该文件旁的 “+” 号,或终端执行
git add <file></file> - 多个冲突文件全部处理完后,还要点一次 “Commit Merge” 按钮(或
git commit),否则合并没真正完成 - 如果误点了 “Discard Changes”,会清空整个文件的未暂存修改,包括你刚手动修好的部分——没有二次确认
冲突标记行(、<code>=======、>>>>> feature/xxx)只要残留任意一行,VSCode 就认定该文件未解决,哪怕其他地方都改对了。


















