sublime merge 是独立 git 客户端,仅支持仓库内基于 git 状态的差异比较(如工作区 vs 暂存区),不支持任意两个本地文件直接对比;非 git 文件需用 diffy 插件或系统 diff 命令。

Sublime Merge 不是 Sublime Text 插件,而是独立的 Git 客户端,它本身不提供“任意两个本地文件”的对比功能——你无法像在 VS Code 里那样右键选中两个 .json 文件直接 Diff。
Sublime Merge 能比什么、不能比什么
它只处理 Git 仓库内的文件,并且依赖 Git 状态(工作区 vs 暂存区 vs HEAD):
• 可比:当前工作区修改 vs 暂存区(即未 git add 的变更)
• 可比:暂存区 vs HEAD(即已 git add 但未 git commit 的变更)
• 可比:任意两个 Git 提交之间的单文件差异(通过提交图谱双击跳转)
• 不可比:config1.yaml 和 config2.yaml 这类无 Git 关联的两个磁盘文件
• 不可比:未纳入任何 Git 仓库的文件,即使它们在同一个文件夹下
为什么在 Sublime Text 里点 “Open in Sublime Merge” 没反应
常见原因不是插件没装,而是路径或权限卡住了:
• sublimerge 命令未加入系统 PATH(macOS/Linux 需运行 sublimerge --install-shell-commands;Windows 安装时勾选 “Add to PATH”)
• 当前文件不在 Git 仓库根目录下(Sublime Merge 只认 .git 目录所在位置为有效上下文)
• 文件被 Git 忽略(出现在 .gitignore 中),则 Sublime Merge 默认不加载该文件的 diff 视图
• macOS 上首次启动可能被 Gatekeeper 阻止,需到“系统设置 → 隐私与安全性”手动允许
对比界面里“Stage Hunk”和“Discard Hunk”点错怎么办
这两个按钮操作的是 Git 暂存区,不是文件内容本身,误点后有补救路径:
• 点了 Stage Hunk 但想撤回:在 Sublime Merge 左侧文件列表右键该文件 → Reset File(还原到 HEAD)
• 点了 Discard Hunk 但后悔了:关闭该文件 diff 视图 → 重新从左侧列表双击打开,会恢复原始工作区状态
• 注意:Discard Hunk 不等价于 git checkout -- <file></file>,它只丢弃高亮块,不是整文件重置
• 所有操作都不会自动写入磁盘,但一旦执行 Commit,就不可逆
想比两个非 Git 文件?别硬塞进 Sublime Merge
它底层是 Git 工具链封装,强行用它比 /tmp/a.log 和 /tmp/b.log,唯一办法是临时建仓:
• cd /tmp && git init && git add a.log b.log && git commit -m "tmp"
• 再用 Sublime Merge 打开 /tmp,选中两个文件 → 右键 Compare With…
但这只是绕路,且对比结果会混入 Git 元信息(如行首的 diff --git 头)
真正该用的,是 Sublime Text 插件 Diffy(支持磁盘路径直比)或系统命令 diff -u a.log b.log ——快、准、不污染环境











