GitPeek
GitPeek 是一款面向代码上下文的轻量级 VS Code Git 扩展。 无需在复杂的 Git 界面间来回切换,即可查看当前代码行的修改者、文件历史、分支变更、选中代码的提交来源,并在提交前审查更改。
功能
- 当前行归属:查看光标所在代码行的作者、日期和提交摘要。
- 整文件归属:按需在每行旁显示作者、日期与提交,支持当前编辑器未保存的内容;新增/修改行标记为未提交,Hover 可打开提交或对应文件 Diff。切换文件后自动退出。
- 文件历史:浏览文件的近期提交,点击即可查看该文件在本次提交前后的差异,包含重命名历史,并支持加载更多。
- 版本导航:历史 Diff 标题栏可前往上一处/下一处文件修改,保留仓库、重命名前路径与打开时固定的历史快照。
- 提交图:用分叉连线查看本地和远程提交,显示作者头像、引用与摘要;可从图中查看提交详情,并切换、创建、合并本地分支。
- 整理提交(交互式 Rebase):在编辑器内重排当前分支的线性提交,并设置
pick、reword、edit、squash、fixup 或 drop,支持从根提交开始整理;执行前确认计划并保留备份引用,暂停后可继续或中止。
- Stash:查看和预览当前仓库临时保存的改动,可保存已跟踪文件并按需包含未跟踪文件,也可应用或确认删除所选记录。
- 提交详情与差异:查看提交修改的文件,并在 VS Code 中打开文本差异。二进制文件仅显示元数据,不会作为文本渲染。
- 固定提交详情:提交详情在独立侧栏保留完整消息、作者、Hash、文件与统计;标题栏可固定/取消固定,连续打开多个 Diff 无需重复选择提交。
- 历史搜索:提交图可按消息、作者、Hash 或代码文本变化查询 Git 历史,组合文件/目录路径、起止日期与全部/当前分支范围,并加载更多。路径按字面量匹配;代码变化查找指定文本出现次数改变的提交,日期按本地时区的提交者日期计算,包含起止日。
- 自由比较:右键提交选择比较起点,再与另一提交比较;文件历史和详情中的文件可与工作区磁盘版本比较。
- 分支比较:查看当前分支相对基准分支的领先/落后数量、提交、变更文件和差异。
- 选中代码来源:按提交归组选中行并统计行数。未提交的行会单独显示,不会打开提交历史。
- 选区演进历史:追踪选中代码经历过的修改,沿首父提交链处理 Merge,并保留 Git 能识别的重命名前路径;选择提交直接打开对应历史文件的 Diff,历史路径无法确认时查看提交详情。支持编辑中的文本:未修改行映射回 HEAD,混合选区可选择可追溯片段,全新增或改写的行会明确提示。
- 审查更改:检查已暂存、未暂存和未跟踪的文件及行数,并提示
console.log、debugger、TODO、FIXME、.env 和 *.pem 等内容。
- 文件级暂存:在更改列表右键暂存或取消暂存文件,支持 Ctrl/Cmd、Shift 多选及分组操作;支持新增、删除、重命名与首次提交,取消暂存保留工作区内容。
- 智能生成提交信息:根据已暂存文件的名称和状态生成候选信息,并可将所选内容填入当前仓库的 SCM 提交输入框。此功能不使用 AI,也不会检查完整差异来推断意图。
GitPeek 侧栏包含“仓库”“更改”“分支变更”“文件历史”“提交详情”和“提交比较”视图。针对文件的命令会使用当前活动文件所属的仓库。智能提交通过仓库根目录匹配 VS Code 内置 Git SCM,因此支持多根工作区。
提交图从仓库视图标题栏或命令面板打开。公开 GitHub 仓库可显示 GitHub 头像;没有公开头像或网络不可用时显示作者首字母。每条提交的操作按钮可复制完整 Hash、检出提交或 Cherry-pick 到当前分支。检出将进入分离 HEAD 状态;检出和 Cherry-pick 均要求工作区干净。Cherry-pick 冲突时可在图中继续或中止。合并分支前也要求工作区干净,发生冲突时保留 Git 的冲突状态供你处理。
命令
打开命令面板(Ctrl+Shift+P / Cmd+Shift+P)运行:
| 命令 |
用途 |
GitPeek: 文件历史 |
查看当前文件的历史 |
GitPeek: 提交图 |
查看提交连线、作者头像和分支操作 |
GitPeek: 整理提交(交互式 Rebase) |
打开当前分支的提交整理编辑器 |
GitPeek: 继续 Rebase |
解决冲突或完成编辑后继续整理 |
GitPeek: 中止 Rebase |
中止正在进行的整理并恢复操作前的状态 |
GitPeek: Stash 管理 |
预览、保存、应用或删除 Stash |
GitPeek: 查看当前行归属 |
刷新光标所在行的归属信息 |
GitPeek: 切换整文件归属 |
在当前编辑器显示或关闭全部行的归属 |
GitPeek: 上一处文件修改 |
在历史 Diff 中前往更早的文件修改 |
GitPeek: 下一处文件修改 |
在历史 Diff 中前往快照中的更新修改 |
GitPeek: 查看选中代码来源 |
查看所选代码行对应的提交 |
GitPeek: 选区演进历史 |
沿首父提交链追溯选区的修改 |
GitPeek: 与基准分支比较 |
比较当前分支与基准分支 |
GitPeek: 查看分支变更 |
查看分支提交和变更文件 |
GitPeek: 审查更改 |
检查已暂存、未暂存和未跟踪的更改 |
GitPeek: 生成提交信息 |
根据已暂存文件生成候选提交信息 |
GitPeek: 刷新 |
刷新 GitPeek 视图和缓存数据 |
“文件历史”和“与基准分支比较”也可从编辑器标题栏打开。选中文本后,可从编辑器上下文菜单打开“查看选中代码来源”。
右键提交图中的提交,可查看详情、复制完整 Hash、检出、Cherry-pick 或“从此提交开始整理”;检出和 Cherry-pick 保留原有确认与工作区检查。提交图工具栏的“整理提交”可打开当前分支的整理编辑器。右键侧栏的文件历史或分支提交,可查看详情、复制 Hash;文件历史、分支变更文件和更改列表均可右键打开差异。编辑器和资源管理器中的文件也提供“文件历史”和“与基准分支比较”入口,操作使用右键所指文件的仓库。
文件历史、分支变更文件和更改列表还可右键“打开工作区文件”或“复制相对路径”(相对于该文件的仓库根目录)。文件历史中的这些操作使用当前文件路径,历史 Diff 仍使用提交时的路径;工作区文件已删除时会提示,不会创建空文件。四个侧栏视图的标题栏均提供刷新按钮,用于刷新 GitPeek 视图和缓存。
设置
| 设置 |
默认值 |
说明 |
gitpeek.enabled |
true |
启用 GitPeek 功能。 |
gitpeek.blame.enabled |
true |
启用当前行归属显示。 |
gitpeek.blame.delay |
300 |
解析当前行归属前的延迟,单位为毫秒。 |
gitpeek.history.limit |
20 |
初次加载的文件历史条数。 |
gitpeek.baseBranch |
auto |
用于比较的基准分支,或指定分支名称。 |
gitpeek.commit.conventional |
true |
将智能提交候选信息格式化为 Conventional Commits。 |
gitpeek.commit.defaultType |
chore |
首选类型:feat、fix、refactor、perf、docs、test、style 或 chore。 |
环境要求
- VS Code 1.96.0 或更高版本。
- 系统已安装 Git,且 Git 可通过
PATH 找到。
- 已启用 VS Code 内置 Git 扩展,以集成 SCM。
构建并安装本地 VSIX
在仓库根目录安装开发依赖并构建扩展:
npm install
npm run check
npm test
npm run package
在 VS Code 中安装生成的 VSIX:
code --install-extension gitpeek-0.7.0.vsix
也可以在 VS Code 中运行 扩展:从 VSIX 安装...,然后选择生成的文件。
自动打包与发布
每次推送分支或创建 Pull Request,GitHub Actions 都会在 Windows 和 Linux 上运行测试、类型检查并生成 VSIX,可从对应 CI 运行的 Artifacts 下载。正式版本安装包见 GitHub Releases。
发布新版本时,同步更新 package.json 与 package-lock.json 的版本号,提交并推送后,为该提交创建相同版本的标签(例如 v0.7.0),再推送标签。Release 工作流会检出标签对应的代码,核对版本、运行测试并打包,将 VSIX 附加到 GitHub Release。
补发历史版本:先将版本标签指向该版本的历史提交并推送,再在 Actions → Release → Run workflow 中选择 main,填写对应标签。手动补发不会把旧版设为 Latest;已有同名安装包会保留。
本轮新增整文件归属、历史版本导航、编辑中选区追溯和交互式 Rebase,以 v0.7.0 发布。历史版本 v0.1.0~v0.6.0 使用各自验收提交补发。
范围与限制
GitPeek 0.7.0 在 0.6.0 基础上增加历史筛选、整文件归属、版本导航、编辑中选区追溯和交互式 rebase。Pull Request 集成、AI 聊天、按行暂存及丢弃修改仍不在范围内。智能提交仅根据已暂存文件的路径和状态提供措辞建议,提交前请检查生成的信息。二进制差异仅显示元数据,不显示文件内容。
代码变化搜索使用 Git -S,区分大小写;同一文本只改变位置而出现次数不变时不会命中。路径筛选只匹配填写的文件或目录,不跨重命名前路径追踪;追踪重命名请使用文件历史。
两个提交采用快照 A → B 直接比较;“与基准分支比较”仍使用共同祖先 → HEAD。工作区比较读取磁盘,遇到未保存内容会提示先保存。选区历史沿 Git 首父提交链追踪,Merge 显示合入结果,不展开其他父链;复制或大幅改写导致 Git 无法识别的重命名可能中断追踪。编辑中的选区只追溯与 HEAD 对应的未修改片段;整文件归属和编辑中追溯支持 2 MB、20,000 行以内的文本。版本导航固定在打开时的历史快照,重新打开文件历史 Diff 才包含新提交。
更改列表支持 Ctrl/Cmd 多选和 Shift 连选。暂存可混选同一仓库的未暂存与未跟踪文件;取消暂存只接受已暂存文件。右键分组或点击分组的加/减按钮可处理当前分组,文件行也提供快捷按钮。所选文件中有冲突、未保存修改或过期状态时整批停止;操作只更新 index,不删除磁盘文件。
交互式 rebase 使用原生 Git,每次最多整理当前分支的 200 个线性提交(可包含根提交),不重写 Merge 历史,不支持跨分支 onto,也不会自动推送。开始前要求工作区干净且没有未保存文件;所选历史被本地远程跟踪引用包含时,会特别提示历史重写风险。本地未发现远程引用不能证明提交从未推送。执行前在 refs/gitpeek/rebase/ 下保留原 HEAD 的备份引用,完成或中止后仍保留,可用于恢复。
发生冲突时,先解决并暂存文件,再执行“继续 Rebase”;选择 edit 暂停后,手动修改并通过 git commit --amend 完成该提交,再继续。中止会丢弃本次 rebase 产生的冲突改动并恢复操作前状态。
关闭面板或重启 VS Code 后,可再次执行“整理提交”恢复 GitPeek 发起的 rebase;其他工具发起的 rebase 仍由原工具处理。完成后如需找回原历史,可使用面板显示的备份引用创建恢复分支:git branch <恢复分支名> <备份引用>,再检查原有提交。备份引用不会自动删除。
改进方案与性能复测
第一轮任务与验收见 代码调查体验改进方案,本轮整文件归属、版本导航及编辑中追溯见 深入代码调查改进方案。运行 npm run benchmark -- . README.md HEAD~1 10 可记录当前环境下的数据查询延迟与 Git 调用量;这不是 VS Code 界面耗时或 GitLens 性能对照。