必须运行git config --global merge.tool vscode和git config --global mergetool.vscode.cmd 'code --wait --merge $BASE $LOCAL $REMOTE $MERGED',确保--wait与--merge参数齐全、变量顺序正确,并验证code命令在PATH中;冲突时需执行git mergetool触发四窗格界面,解决后须git add或点Take this change才标记为已解决。

VSCode 默认不接管 Git 合并流程,必须手动配置 Git 使用它作为 mergetool,否则点“Resolve in Merge Editor”可能失效,或 git mergetool 根本不弹窗。
怎么让 git mergetool 真正调起 VSCode 合并编辑器
Git 不知道该用什么工具处理冲突,得明确告诉它。只装 VSCode 不够,关键在终端里运行这两条命令:
-
git config --global merge.tool vscode(Windows 用户请用vscode.cmd) git config --global mergetool.vscode.cmd 'code --wait --merge $BASE $LOCAL $REMOTE $MERGED'
注意:--wait 和 --merge 缺一不可。--wait 让 Git 挂起等待你操作完;--merge 触发四窗格视图(BASE/LOCAL/REMOTE/MERGED),不是普通文件打开。变量顺序不能错,否则可能传参失败。Windows Git Bash 用户若报错,尝试把 $BASE 写成 \$BASE 防止 shell 提前展开。
验证是否生效:制造一次冲突(比如两个分支改同一行),然后运行 git mergetool —— 正确情况下会直接弹出四窗格界面,而不是打开空白文件。
为什么点了“Resolve in Merge Editor”却还是文本模式
VSCode 的合并编辑器只在 Git 明确标记文件为 “unmerged” 时才激活。常见失效场景:
部署一个包含 4 个智能体(agent)的数字孪生平台。在以下情况下使用该技能: 1. 用户希望为物理资产监控与预测性维护等场景搭建数字孪生系统……
- 你手动编辑了冲突文件但没运行
git add,Git 仍认为它处于未解决状态,但 VSCode 可能因缓存未刷新而没渲染控件 - 项目根目录没打开(即没打开含
.git的文件夹),VSCode Git 扩展无法读取索引 - Git 扩展被禁用,或左下角状态栏看不到分支名和 Git 图标
实操建议:按 Ctrl+Shift+P 输入 Git: Show Git Output,看有没有 fatal: not a git repository;再执行 git status,确认冲突文件出现在 Unmerged paths 区域。如果已误操作,可用 git checkout --ours <file></file> 回退后重试,避免残留标记干扰。
Accept Both Changes 拼接代码却不校验逻辑,哪些情况必须手动编辑
这个按钮只是把左右两段代码按顺序粘进 RESULT 区域,不做语义分析。以下情况极易翻车,应放弃一键操作:
- 两边都新增了同名函数或变量声明 → 合并后编译报重复定义
- 左边删了
import React,右边加了import { useState }→ 拼接后缺失核心依赖,运行时报React is not defined - 左边改
if (x > 0),右边改if (x >= 0)→ 拼成两个 if 块,逻辑覆盖不全
此时应切换到中间 RESULT 面板,手动删掉所有 <<<<< HEAD、=======、>>>>> feature-x,逐行检查语法和执行路径。保存前务必用 Ctrl+F 搜一遍 <<<<<,漏掉任意一行,文件就永远卡在 “Conflicted” 状态。
保存后文件还在 Conflicted 列表里?不是没解决,是没通知 Git
VSCode 修改的是文件内容,Git 完全不知道你“心里觉得搞定了”。必须显式告诉 Git:“这个文件我处理完了”。方式有两种:
- 在合并编辑器右上角点
Take this change(小勾图标),它会自动执行git add <file> - 手动运行
git add <file>,哪怕只改了一行
注意:仅保存文件(Ctrl+S)或点击 Accept Current Change 按钮,都不等于 git add。保存后立刻看源代码管理面板——文件从 “Conflicted” 移入 “Merged” 才算真正通过。如果还卡着,大概率是某处残留了冲突标记,或有其他未处理的冲突文件,用 git status 确认全量状态。

















