sublime text 本身不支持三方合并,无法直接解决 git 合并冲突;需借助插件 diffy(仅行级对比)或官方工具 sublime merge(支持三路合并与冲突可视化处理)。

Sublime Text 本身不能直接解决 Git 合并冲突——它不是三方合并工具,也不解析 标记块的语义。真正在 Sublime 生态里可靠处理冲突的,只有 <strong>Sublime Merge</strong> 这个独立应用。
为什么 Sublime Text 插件解决不了真正的 Git 冲突
很多人装了 Diffy、Compare Files 或搜到“sublimerge”插件,结果右键只有 Compare with Tab。这类插件只做两路文本对比,不提供 base/head/remote 三路视图,也不能自动定位冲突块、接受某一边、或标记已解决。Git 的 git mergetool 调用时需要能接收 $BASE、$LOCAL、$REMOTE、$MERGED 四个路径参数,而 Sublime Text 默认启动命令(如 subl --wait)根本不认这些变量。
- 插件无法识别
.gitattributes中的merge=ours等策略 - 大文件或密集冲突时,Find All 搜索
容易卡死,且找不到嵌套冲突 - 手动删标记后保存,Git 仍认为文件“未解决”,必须显式
git add—— 插件不触发这步
Sublime Merge 配置三步必须全对
装错、配错、漏关信任提示,是 90% 失败的根源。验证是否生效:终端运行 smerge --version 有输出才算装对;再运行 git mergetool 能弹出四栏界面才算配通。
- 设工具名:
git config --global merge.tool sublime_merge(注意不是smerge,除非你额外注册了该工具名) - 配调用命令:macOS 推荐用完整路径避免空格问题:
git config --global mergetool.sublime_merge.cmd '/Applications/Sublime Merge.app/Contents/SharedSupport/bin/smerge "merge" "$LOCAL" "$REMOTE" "$BASE" "$MERGED" --wait' - 关信任提示:
git config --global mergetool.trustPrompt false—— 不加这句,每次都会卡在Hit return to start merge tool,按回车也没反应
打开 Sublime Merge 后,真正起效的操作在哪
界面分四栏,但新手常只盯着中间 Merged 区手动改,浪费时间还容易漏块。关键操作入口其实藏在两侧:
- 左边
Local和右边Remote每个差异块上方都有小三角图标 → 点它才是“接受这一整块” - 不要双击、不要拖选、不要在中间区 Ctrl+V —— 那些都不触发 Git 的冲突标记清除逻辑
- 遇到
rebase场景下$BASE为空,Sublime Merge 可能闪退;此时改用git mergetool --no-prompt绕过 - 改完必须点右上角
Save(不是 Cmd+S),否则 Git 不认为文件已保存
解决完必须手动 git add,Sublime Merge 不代劳
Sublime Merge 只负责生成干净的 $MERGED 文件内容,它不会执行 git add。哪怕你点了 Save、关了窗口、看到终端提示 “Merged”, 如果没在终端里运行:
-
git add <filename></filename>(逐个加,别用git add .,它会跳过未解决文件) - 再
git merge --continue(或git rebase --continue)
Git 就一直卡在 MERGING 状态。这个衔接动作完全脱离图形界面,最容易被忽略。











