Sublime Text 的 Git Diff 功能完全依赖插件(如 GitGutter、GitSavvy),本质是解析命令行 git diff 输出的文本处理器,不支持原生图形化差异渲染、三路合并、暂存区对比或中文路径自动编码适配。

Git Diff 对比在 Sublime Text 里不是“点一下就出图”的功能
Sublime Text 原生不支持 Git diff 图形界面,所有所谓“Git Diff”能力都依赖插件调用命令行 git diff 输出并解析——它本质是个文本解析器,不是真正的 diff 渲染引擎。这意味着:你看到的差异是否准确、能否显示空格变化、会不会漏掉未暂存文件,全看插件怎么调用 git、怎么处理编码和换行符。
- GitGutter 只在行号旁打小图标(
+/-/~),悬停才显示变更内容,不展开就不知道删了哪一行 - GitSavvy 的
gs_show_file_diff命令会弹出完整 diff 面板,但只对已git add或已 commit 的文件有效;新建文件或未跟踪文件直接不响应 - 如果本地
git不在 PATH 里,或者仓库权限异常(比如 submodule 内部路径错误),插件可能静默失败,控制台也不报错
GitGutter 是最轻量、最稳的选择,但得配对用
它不抢焦点、不新开标签页、不卡顿,适合日常边写边看改了啥。但它不是独立工具——必须和 GitSavvy 或手动命令配合,才能看到完整上下文。
- 安装后默认只显示“当前 vs HEAD”,不支持对比任意两个 commit(如
git diff HEAD~2 HEAD) - 要查某次提交前后的差异,得先用 GitSavvy 运行
gs_log找到 commit hash,再右键选 “Diff with previous” - 若发现某行标了修改却看不出改了啥,大概率是该行只有空格/缩进变化——GitGutter 默认启用
--ignore-space-change,需在插件设置里关掉ignore_whitespace - 中文路径或 GBK 编码文件可能乱码,建议统一用 UTF-8 保存,并在
GitGutter.sublime-settings中加"encoding": "UTF-8"
别指望用 Sublime 做三路合并或暂存区对比
所有 Sublime Git 插件都不读取 index(暂存区)的二进制状态,也没法渲染 merge conflict 的 >>>>>> 块为可编辑区域。它们只是把 git diff --no-index 或 git show :0:file.py 的输出贴出来而已。
- 想看“工作区 vs 暂存区”,只能用终端跑
git diff;想看“暂存区 vs HEAD”,得跑git diff --cached - GitSavvy 的
gs_stage_hunk能暂存代码块,但无法可视化选择“左边留、右边删”——那属于 VS Code 或 Sublime Merge 的交互范畴 - 如果你正卡在冲突解决环节,别硬拖着 Sublime 硬刚:直接运行
git mergetool,让它唤起 Beyond Compare 或 VS Code 就完事
快捷键和命令面板里的 Diff 全是障眼法
按 Ctrl+Shift+P 搜 Diff,你会看到 Diff: Toggle Diff View —— 它只对比“当前文件内容”和“上次保存版本”,和 Git 完全无关;也看不到任何 commit 信息,更不涉及暂存区。
- 这个功能连
git status都不查,纯靠 Sublime 自己记的 buffer 快照,关掉再打开就失效 - 有人误以为它能替代
git diff,结果改完没保存就去对比,看到“无差异”就以为没动过,其实改早丢了 - 真正需要 Git 级别的差异反馈,请认准插件命令前缀:
GitGutter:或GitSavvy:,其他带Diff字样的十有八九是文本比对功能

















