sublime text 无法自动解决 git 冲突,仅支持人工比对编辑;真正解决需用独立应用 sublime merge,并严格配置 smerge 命令、参数顺序及 trustexitcode;compare files 插件仅适合轻量对比,不适用于冲突解决。

Sublime Text 本身没有 Git 冲突解决能力
它不识别 、<code>=======、>>>> branch-name 这类标记,也不会高亮冲突块或提供“接受左边/右边/全部”按钮。所有所谓“冲突解决”,实际是人工比对 + 手动编辑——哪怕你装了 Compare Files 插件,它也只是把两个文件并排显示,标红标绿而已,不会告诉你哪段该留、哪段该删。
真要解决 Git 冲突,必须用 Sublime Merge
Sublime Merge 是独立应用,不是插件,也不是 subl 命令能调起的。关键点只有三个:
-
smerge --version在终端必须有输出,否则 Git 根本找不到它 - Git 配置必须严格为:
git config --global mergetool.smerge.cmd 'smerge merge "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED"'—— 参数顺序错一个就白配 - 必须加:
git config --global mergetool.smerge.trustExitCode true,否则每次保存后 Git 还卡着问Was the merge successful?
Compare Files 插件只适合轻量对比,别当合并工具用
它常见失效场景包括:
- 两个文件换行符不一致(
\r\nvs\n),整行标红,但内容其实一样 - 空格、缩进、末尾空白差异也会触发高亮,干扰真实逻辑变更判断
- 遇到 Git 冲突块,它当普通文本处理,无语法高亮、无折叠、无上下文提示
- 文件结构差异大(比如一个按模块分组、一个按时间追加),左右栏根本没法对齐阅读
手动拼接配置文件时最容易忽略的细节
用 View → Layout → Columns: 2 并排打开两个配置文件再复制粘贴,看似简单,但实际容易出问题:
- 源文件末尾没换行符?下一段内容会紧贴着写过去(如
key=valuekey2=value2) - 不同文件编码混用(UTF-8 + GBK)?复制后中文直接变
- 想加空行分隔?得手动敲
Enter,不能依赖源文件自带换行 - JSON/YAML 类配置里有注释?Ctrl+J 合并多行会把
# comment和下一行连成# commentvalue
真正麻烦的从来不是“怎么合并”,而是合并后要不要保留原始顺序、是否要过滤重复键、是否要校验语法有效性——这些 Sublime Text 不管,也管不了。











