使用 OpenCommit 从 diff 生成有意义的提交信息
我们都有过这样的经历:一天工作结束,五个文件改了十几处,疲惫感袭来,于是一个个像 git commit -m "fix"、wip 2 或 refactor 这样的"杰作"就飞进了仓库历史。然后几个月后你打开 git log 想找出授权为什么坏了,却只看到一墙的简短描述。
OpenCommit 的作者决定将这个日常流程自动化。该项目获取你的暂存更改(staged changes),使用语言模型分析代码 diff,然后按照 Conventional Commits 标准生成恰当、清晰的描述。

实际使用方式
该工具通过 npm 安装为全局 CLI 包。你对项目进行修改后,不再使用常规的 commit 命令,而是调用 oco:
npm install -g opencommit
接下来需要设置 API key。默认情况下,该工具配置为使用 OpenAI 模型(例如 gpt-4o-mini):
oco config set OCO_API_KEY=sk-...
之后,工作流程被简化到极致。你修改文件后运行:
git add .
oco
oc 命令会调用模型,传递更改的 diff,并建议现成的文本。如果一切看起来不错,按 Enter 键即可创建提交。如果想跳过手动确认,可以使用 oco --yes 标志。
不将代码发送到云端的工作方式
许多开发者由于安全要求或公司政策无法将源代码发送到第三方服务器。OpenCommit 为此提供了本地运行器的集成。
该工具可以与 Ollama 和 llama.cpp 通信。对于本地工作,只需启动 Ollama 并加载所需的模型(例如 Llama 3 或 Mistral),然后切换配置:
oco config set OCO_AI_PROVIDER='ollama' OCO_MODEL='llama3:8b'
如果 GPU 服务器在本地网络中的另一台机器上,只需指定端点地址:
oco config set OCO_API_URL='http://192.168.1.10:11434/api/chat'
同样的方案也适用于 llama.cpp,只需运行内置的 HTTP 服务器 llama-server。
按团队标准配置
OpenCommit 提供了几个有用的设置,使生成的消息适合真实的团队开发。
Conventional Commits 和 commitlint
开箱即用,该工具按照 Conventional Commits 格式生成消息(feat: ...、fix: ...、chore: ...)。如果你的仓库已经配置了 @commitlint,你可以将工具切换为使用本地 linter 规则:
oco config set OCO_PROMPT_MODULE=@commitlint
首次运行时,该命令会创建一个本地的 .opencommit-commitlint 文件,模型将从中获取文本生成的示例和约束。
忽略不必要的文件
将数千行更改的 lock 文件发送到 prompt 是毫无意义的,而且会消耗大量 token。文件 *.lock 和 *-lock.* 会自动排除,对于其他文件你可以创建 .opencommitignore:
path/to/large-asset.zip
**/*.jpg
dist/**
包含任务编号的模板
通常需要在消息开头包含 Jira 或 GitHub Issues 的任务编号。为此,工具通过 $msg 占位符支持模板:
oco '#1042: $msg'
工具会将生成的描述替换到 $msg 的位置,保留任务前缀不变。
集成到 Git Hook
使用 OpenCommit 最便捷的方式是将其挂载到 prepare-commit-msg hook。这样你甚至不需要记住 oco 命令。
Hook 通过以下方式启用:
oco hook set
现在当你调用 git commit 时(或在 VS Code / WebStorm 界面中点击提交按钮),OpenCommit 会自动生成文本并插入到编辑器的输入窗口中。如果模型遗漏了某个重要细节,你可以立即调整措辞。
细节与限制
使用该工具时需要记住几点:
- Diff 大小。 如果你一次更改了数百个文件,请求可能会触及模型的上下文限制,或生成过于笼统的描述。OpenCommit 最适合小型、原子化的提交。
- GitHub Action。 仓库中有一个现成的 action,用于在推送到分支时自动修复提交。使用时需要谨慎:该 action 执行交互式 rebase,会重写提交的 SHA。此场景不能用于共享分支(
main、dev)。
适用人群
OpenCommit 解决了个人项目和小型团队中随意提交历史管理的问题。如果你懒得手动按照规范格式化提交,这个工具可以节省大量时间。
最简单的入门方式是全局安装和本地 Ollama:这样你可以立即在自己的仓库上测试生成质量,而无需花费 token 费用。
相关项目