gitlens是唯一支持行内、gutter、悬浮、热力图四种blame模式共存的扩展,vscode内置git: toggle blame仅简略显示作者和时间,不支持自定义格式、邮箱、跨重命名追溯或忽略格式化提交,且不常驻、不可点击跳转。

VSCode 本身不提供“每行作者”功能,真正能稳定实现的只有 GitLens —— 它不是可选项,是目前唯一支持行内、gutter、悬浮、热力图四种 blame 模式共存的扩展。
GitLens 是什么,为什么不能只用 VSCode 内置 Git: Toggle Blame
VSCode 内置的 Git: Toggle Blame 确实能快速显示作者和时间,但它只在编辑器左侧 gutter(行号右侧空白区)渲染简略信息,且不支持自定义格式、不显示邮箱、不跨重命名追溯、不忽略格式化提交。更重要的是:它默认不常驻,每次都要手动触发;关闭后不会自动恢复;也不支持点击跳转到 commit 页面或对比 diff。
GitLens 则把所有这些补全了——它不是“增强版 Toggle Blame”,而是从底层重构了 blame 渲染逻辑,支持:
-
gitlens.blame.line.enabled:让作者名+哈希常驻 gutter -
gitlens.codeLens.enabled:在每行代码上方插入作者+时间注释(位置在内容区顶部,非行号列) -
gitlens.advanced.blame.followRenames:启用后,git mv utils.js helpers.ts后再改,blame 不会断 -
gitlens.advanced.blame.ignoreRevsFile:配合.git-blame-ignore-revs过滤 Prettier 自动提交
安装完 GitLens 为什么一行作者都不显示
这不是插件没装好,而是三个硬性前提缺一不可:
- 当前文件必须被 Git 跟踪:
git ls-files | grep your-file.ts必须有输出;新创建未git add的文件永远显示Unknown author - Git 用户信息必须完整:
git config --get user.name和git config --get user.email都得有值;否则 fallback 为Unknown author - VSCode 工作区必须识别为 Git 仓库:状态栏左下角要能看到分支名(如
main),没有就点 Git 图标 →Open Repository
常见误操作:搜 gitlens.annotations.enabled 并开启——这控制的是侧边栏浮层,不是行内作者;真正管行内注释的是 gitlens.codeLens.enabled,且需同时开启 gitlens.codeLens.recentChange 才会随每次提交更新作者,否则只显示首次提交人。
怎么让作者信息固定出现在行号旁(gutter)
很多人想“贴着行号显示”,但 VSCode 行号列(.line-numbers)本身不支持文本注入,所有 CSS hack 在 1.88+ 版本已失效。所谓“行号旁”,实际是指 gutter 区域——即行号右侧那条竖直空白带。
要让它常驻显示作者+哈希,只需:
- 打开设置(
Ctrl+,),搜索gitlens.blame.line.enabled,勾选 - 或直接在
settings.json中添加:"gitlens.blame.line.enabled": true - 效果是每行 gutter 显示类似
alice@abc123的紧凑标识,点击可展开完整 commit 信息
注意:gitlens.blame.heatmap.enabled 是另一回事——它会在 gutter 绘制颜色深浅代表修改频次的热力图,和作者名无关。
为什么某行显示 “Not committed yet” 或 blame 信息明显错位
这不是 GitLens bug,而是 Git blame 本身的机制限制:
- 文件刚
git add但未git commit:所有行都是Not committed yet,这是 Git 层面无 author 信息的客观事实 - 整块粘贴/格式化导致 blame 断链:比如 ESLint 自动 fix 插入空行或调整缩进,Git 默认会把整行归给那次格式化提交;必须启用
gitlens.advanced.blame.ignoreRevsFile并维护.git-blame-ignore-revs - rebase 或
filter-branch后 author 信息丢失:原始 commit 被重写,blame 无法还原,GitLens 也无能为力 - merge commit 中手动解决冲突的行:blame 可能指向 parent commit 而非你实际编辑的那次,这是 Git 的 cherry-pick 模式决定的,非配置问题
最准的追溯方式是右键某行 → GitLens: Blame Line with Options → 勾选 Follow renames 和 Use merge-aware blame,但这手动操作没法常驻,仅适合关键逻辑排查。











