Sublime Text 本身不解决 Git 冲突,GitConflict 插件仅高亮冲突标记,不能替代 Sublime Merge;真正解决需配置 git mergetool 调用 smerge,并在 Sublime Merge 中操作后执行 git add 才算完成。

Sublime Text 本身不解决 Git 冲突,GitConflict 插件只做高亮,不能替代三方合并工具。 它既不打开可视化界面,也不参与实际 resolve 流程,仅在编辑器里标出冲突标记区域。真要解决冲突,还得靠 git mergetool 调起 Sublime Merge —— 而不是在 Sublime Text 里点几下就完事。
GitConflict 插件只能标记冲突,不能解决冲突
GitConflict 是一个语法高亮增强插件,作用非常明确:扫描文件里形如 <<<<<< HEAD、=======、>>>>>> feature/login 的 Git 冲突标记,并用背景色/边框等方式突出显示。它不读取 Git 状态,不调用 git diff,也不修改任何内容。
常见误用场景:
- 装了 GitConflict 就以为“能图形化解决冲突”,结果改完保存后
git status仍显示both modified - 期待它像 VS Code 那样提供 “Accept Current” 按钮,但 Sublime Text 默认没有这类交互控件
- 在多人协作中误以为靠它就能跳过
git add步骤,导致 commit 失败
Sublime Text 要真正参与冲突解决,必须配 GitSavvy
GitSavvy 才是 Sublime Text 生态里唯一能串联完整 Git 工作流的插件。它不依赖 GitConflict,而是直接调用系统 Git 并封装命令入口。
关键配置项必须手动填准:
-
"git_path":不能指望 Sublime Text 自动找到git,必须在 GitSavvy 设置里写死路径,比如 macOS 上填"/usr/local/bin/git" - 执行
git: merge或git: rebase后若卡住,说明没配merge.tool,此时仍会 fallback 到 vim - GitSavvy 本身不启动 Sublime Merge,但它支持快捷键触发
git mergetool—— 前提是你已按正确方式配置好smerge
让 git mergetool 正确调起 Sublime Merge 的硬性条件
这不是“装完插件点一下”的事,每一步都可能断链:
-
smerge --version必须在终端直接运行成功;失败说明没进$PATH,Windows 要检查系统环境变量,macOS 可能需要sudo ln -sf ... - 配置命令必须用
smerge merge "$BASE" "$LOCAL" "$REMOTE" -o "$MERGED",顺序错一位(比如把$BASE放最后)会导致界面空白或崩溃 -
git config --global mergetool.smerge.trustExitCode true缺不得,否则每个文件解决完都要手动输y,批量冲突时根本没法忍 - 必须设
git config --global merge.tool smerge,否则git mergetool根本不知道该调谁
Sublime Merge 里保存 ≠ Git 认为冲突已解决
这是最常被跳过的致命环节:你在 Sublime Merge 中按 Cmd+S 保存,窗口关闭,看起来万事大吉 —— 但回到终端跑 git status,文件依然在 Unmerged paths 下。
原因很实在:
- Sublime Merge 只负责把最终内容写回
$MERGED文件路径 - Git 不监听文件写入事件,它只认
git add <file>这个动作 - 漏掉
git add,后续git commit或git merge --continue全部报错 - 多个冲突文件时,容易只记得关掉 Sublime Merge,却忘了回终端挨个
git add或干脆git add .
真正的收尾动作永远在终端里,不在图形界面中。哪怕你用了最顺手的工具,这一步也绕不开。


















