sublime merge 是处理 git 合并冲突最直接有效的工具之一,无需插件或手动解析。

Sublime Merge 是处理 Git 合并冲突最直接有效的工具之一,它不依赖插件、不需手动解析 标记,而是用三路视图把 base / local / remote 清晰分开。只要配置正确,一次 <code>git mergetool 就能打开可视化界面,点选+保存即完成解决。
怎么让 git 知道用 Sublime Merge 当合并工具
Git 默认不认识 sublime_merge,必须显式配置命令和信任策略,否则会 fallback 到 vim 或报错“mergetool not found”。
- 先确认命令可用:
which subl(macOS/Linux)或smerge --version(Windows),如果找不到,得手动加安装路径到PATH - 运行这三条命令(顺序不能乱):
git config --global merge.tool sublime_merge<br>git config --global mergetool.sublime_merge.cmd 'subl --wait "$MERGED"'<br>git config --global mergetool.trustPrompt false
- Windows 用户若用
smerge命令而非subl,请改用:git config --global mergetool.sublime_merge.cmd 'smerge merge "$BASE" "$LOCAL" "$REMOTE" "$MERGED" --wait' - 配置后执行
git mergetool,终端应立刻唤起 Sublime Merge 窗口;若弹出 vim,说明配置未生效或$MERGED路径没传进去
三方视图里哪边是 local,哪边是 remote
界面顶部从左到右依次是:Base(共同祖先)、Local(你当前分支的修改)、Remote(要合并进来的分支修改)。中间下方是 Merged file 编辑区——它不是只读预览,而是可直接编辑的最终结果。
-
Local不等于 “你的本地机器”,而是HEAD所指分支的版本;Remote是git merge命令后跟的那个分支(比如git merge feature/login中的feature/login) - 点击某冲突块左侧的三角图标,是“接受
Local内容”;右侧三角是“接受Remote内容”;两者都点,相当于手动复制粘贴 - 如果两边改了同一行但意图不同(比如都重命名了一个变量),光点三角不够,得在
Merged file区手动删减、重写逻辑 - 启用
Show Inline Diffs(右键视图 → Show Inline Diffs)后,被删字符标红、新增字符标绿,比纯行级高亮更准
保存后为什么 git 还提示 conflict 未解决
Sublime Merge 保存文件 ≠ Git 认为冲突已解决。它只是把内容写回磁盘,Git 还需要你显式 git add 把该文件标记为“已处理”。
- 在 Sublime Merge 中点保存(
Cmd+S/Ctrl+S),关闭窗口 - 回到终端,运行
git status—— 此时文件仍在Unmerged paths下,状态是both modified - 必须执行
git add <filename></filename>,才能把它移入暂存区;之后git commit或git merge --continue才能继续 - 漏掉
git add是最常被忽略的一步,尤其当有多个冲突文件时,容易只记得关掉 Sublime Merge,忘了回终端敲命令
真正卡住人的地方,往往不是看不懂哪边改了什么,而是配置没走通就放弃、或者以为点完保存就万事大吉。盯住 which subl 输出、盯住 git status 输出,这两步对了,剩下的就是点三角和敲 git add。其他所有操作,都是锦上添花。











