Git Commit Assistant
面向 VS Code 的 JetBrains 风格 Git 客户端与提交信息助手。插件提供“提交”侧栏和“Git 日志”底栏,并保留 VS Code Source Control 提交信息框作为同步目标。
功能
- 通过结构化表单创建或编辑 Conventional Commit,支持自定义格式、Gitmoji、Breaking Change、Issue 和 Skip CI。
- Commit 侧栏中的文件级 checkbox 直接表示提交/不提交,不会执行
git add、git reset 或修改真实 Git Index。
- 根据 Commit 侧栏当前选中的完整文件变更生成提交信息;从原 SCM 命令入口调用时仍兼容读取 Git Index。
- 支持 OpenAI Compatible Chat Completions、OpenAI Responses 和 Anthropic Messages 协议。
- 支持多套命名 Provider 和提示词,并为工作区选择 Provider、全局提示词或项目独有提示词。
- 同步原项目的六套内置提示词:简洁提交、详细提交、完整提交、Gitmoji 提交、emoji详细提交和 Conventional Commit;支持全局/项目输出语言覆盖。
- 六套内置提示词由插件源码提供,只能选择和查看,不能编辑或删除;用户可另建自定义提示词。项目设置会分别展示生效来源、模板原文和最终 Prompt。
- 文件过滤支持自定义 glob、恢复默认和路径实时测试;敏感文件保护始终生效且不能关闭。
- “格式与 Emoji”支持自定义提交
type、中文描述和默认 Emoji;这些手工结构化配置不会追加到 AI Prompt。
- 支持流式写入、取消、超时和手工编辑保护。
- Activity Bar 的“提交”侧栏:按“更改”“未版本化文件”“冲突”和用户自定义分组管理本次提交,支持提交、修订、提交并推送、获取/拉取/推送和 VS Code 原生 Diff/Merge Editor。
- Panel 的“Git 日志”:JetBrains 风格的分支树、拓扑提交图、文件树和提交说明三栏布局;提交图列宽可按内容自适应并可拖拽调整,支持主题/作者/路径/日期/引用过滤、分页、文件 Diff、检出、建分支、Cherry-pick、反向提交和 Reset。
- “更改”和“未版本化文件”直接显示单层文件列表;勾选表示提交,未勾选表示不提交。可新建、重命名和删除自定义分组,并在分组间拖动文件。未版本化文件可拖到“更改”登记跟踪但不暂存内容,也可再次拖回;普通已跟踪文件不能变成未版本化文件。文件右键“添加”会真正执行 Git 暂存,其他菜单支持查看差异、勾选/取消勾选、打开文件、在文件管理器中显示和复制路径。
两条独立工作流
结构化编辑规则只作用于手动编辑。AI 请求以配置的提示词为主,不追加 JSON Schema、Conventional Commit、Emoji 或字段长度规则。
模型返回的任意非空文本都会在去除首尾空白后直接写入 SCM 提交信息框。插件不要求 JSON,不解析字段,不做格式修复请求,也不会把 AI 结果写入结构化草稿缓存。
“修订”对应 git commit --amend,会替换最近一次提交;“签署”会追加 Signed-off-by,用于 DCO 签署。流式响应只有收到正常结束事件才算完成;达到输出上限、连接停滞或提前断开会报错并回滚已写入的部分文本。
使用
- 从 Activity Bar 打开“提交”,或运行
Git提交助手: 打开 Git 提交侧栏。
- 从 Panel 打开“Git 日志”,或运行
Git提交助手: 打开 Git 历史图。
- 需要 AI 时打开设置,添加 Provider,选择协议并配置 Base URL、模型和 API Key。
- 根据需要新建自定义提示词。可用变量为
{diff}、{branch}、{files}、{stats}、{locale}、{previousCommitMessages}、{repositories}、{currentRevision}、{selectedGroups}、{workspaceName}、{workspaceFolders}、{reductionMode}。旧模板中的 {changeList} 和 {projectName} 仍可兼容替换,但不再用于新配置。
- 在“提交”侧栏中勾选要提交的文件。点击文件使用 VS Code 原生 Diff,冲突文件使用 Merge Editor。
- 在提交输入框上方使用结构化编辑、AI 生成、Provider 或设置按钮,然后执行“提交”或“提交并推送”。
“提交”侧栏提交选中文件的完整 Working Tree 版本,未选择的工作区文件和原本已暂存的其他文件保持原样。checkbox 选择按工作区和仓库保存;新增文件默认选中,已消失文件的旧选择会被清理。
“提交”侧栏的 AI 只读取当前选择;没有选择、存在未解决的合并冲突,或全部选择均被安全规则排除时,请求不会发送。AI 结果仍是不解析的纯文本,直接同步到 SCM 输入框。Diff 内 hunk/行选择和部分块提交不在当前版本范围内。
安装
安装构建产物:
code --install-extension build/cool-git-commit-0.4.1.vsix --force
也可以在 VS Code 扩展视图的菜单中选择“从 VSIX 安装”。开发运行使用 F5,会启动 Extension Development Host;不需要单独的 Web 服务器。
Provider
| 协议 |
常见用途 |
API Key |
| OpenAI Compatible |
OpenAI Chat Completions 兼容服务、本地模型网关 |
可选 |
| OpenAI Responses |
OpenAI Responses API 或兼容端点 |
必填 |
| Anthropic Native |
Anthropic Messages API 或兼容端点 |
必填 |
Base URL 必须是没有用户名、密码、查询参数和片段的 HTTP/HTTPS 地址。SDK 自动重试和日志均关闭,一次生成只发起一次模型请求。
数据与安全
- API Key 只保存在 VS Code
SecretStorage,不会进入全局状态、工作区状态或 Webview。
- Provider、提示词、格式和 Emoji 设置保存在全局状态;工作区选择、项目提示词和项目输出语言保存在
workspaceState。
.env、私钥、证书和凭据文件始终会在读取 diff 前排除;常见生成目录由默认的可编辑文件过滤规则排除。过滤只影响 AI 上下文,不改变勾选状态、Git Index 或提交内容。
{repositories} 表示当前生成所用仓库;{currentRevision} 为当前 HEAD;{selectedGroups} 表示提交侧栏中勾选文件所属分组,从 SCM 命令生成时为 Git Index;{workspaceName} 和 {workspaceFolders} 来自 VS Code 当前工作区。
- 用户自定义 Prompt 按输入内容保存和发送,不 trim、不移除 U+200B、不做 Unicode 归一化,并保留组合字符、尾随空格和换行。浏览器 textarea 可能把 CRLF 规范化为 LF。
- 单文件 diff、总 diff、文件数和最终 Prompt 都有上限。发生排除或压缩时会在生成结果通知中说明。
- Prompt、diff 和模型响应不会持久化。
限制
- 需要 VS Code 1.100.0 或更高版本以及内置 Git 扩展。
- 仅支持本地、Remote SSH、Dev Container 和 WSL 的 Git 工作区,不支持 Web Extension 和虚拟工作区。
- 支持多根工作区;Commit 和 Log 顶部的仓库选择器会同步当前仓库。
- 工作区未受信任时插件不会启用。
开发
pnpm install --frozen-lockfile
pnpm run check
pnpm run test:integration
pnpm run package
pnpm exec vsce ls
按 F5 可启动 Extension Development Host。VSIX 输出到 build/cool-git-commit-0.4.1.vsix。
License
Apache License 2.0,完整文本见扩展包中的 LICENSE 文件。