我厌倦了在提交信息里写 “fix”,于是一个下午就把它实现了

发布: (2026年3月15日 GMT+8 10:43)
4 分钟阅读
原文: Dev.to

Source: Dev.to

每个开发者都懂这种感觉

你刚刚花了 3 小时来构建一个功能。
你很累,只想提交代码然后去睡觉。

然后 git 会询问你:

Enter commit message:

然后你输入……“fix”,或者“update”“changes”,或者我个人最喜欢的——“asdfgh”。

没人谈论的日常痛点

这不仅仅是提交信息。作为开发者,你每天都要写三件与实际编码无关的事:

  1. 提交信息 – 每次将代码保存到 git 时
  2. 每日站会 – 每天早上 “昨天我做了什么?”
  3. PR 描述 – 向团队再次解释你的更改

这三件事每天都会发生。它们并不难,但令人烦恼、重复,并且会占用你一天中 10‑15 分钟的时间进行没有任何价值的脑力劳动。

我构建的工具

我构建了 commitgpt —— 一个 CLI 工具,它读取你的 git diff 并使用 AI 自动为你生成上述三类内容。

git add .
cmt

输出

✨ feat(auth): add Google OAuth2 login with session timeout

- Implemented OAuth2 flow using Google provider
- Sessions expire after 30 mins of inactivity
- Fixed bug where users stayed logged in after password change
- Added redirect to dashboard on successful login

这是一条真实、专业的规范提交信息 —— 只用了 2 秒钟就根据你的实际代码更改生成。

三个全部命令

提交信息

git add .
cmt

每日站会

cmt standup

输出

Yesterday: Implemented OAuth2 login flow, fixed session expiry bug
Today: Writing tests for auth middleware, reviewing PR #42
Blockers: None

PR 描述

cmt pr

输出

## What changed
Added Google OAuth2 login with automatic session timeout.

## Why
Users were staying logged in indefinitely, creating a security risk.

## Testing
- Manual: tested login, logout, session expiry
- Unit: auth middleware coverage at 94%

如何使用

安装

pip install commitgpt-nikesh

获取免费 GitHub 令牌

  1. 前往 github.com → Settings → Developer Settings
  2. Personal Access Tokens → Generate new token
  3. 不需要任何作用域。

创建 .env 文件

GITHUB_TOKEN=ghp_your_token_here

运行命令

git add .
cmt              # commit message
cmt standup      # daily standup
cmt pr           # PR description

我的构建过程

  • 大约 300 行 Python 代码。
  • 使用 click 实现 CLI。
  • OpenAI SDK 指向 GitHub Models API。
  • 使用 subprocess 调用 git 命令。
  • 使用 python-dotenv 加载 API 密钥。

最难的部分是编写合适的提示词,以便每次都能得到一致、高质量的输出。

接下来计划

  • 在提交信息中支持 Jira 票号
  • VS Code 插件
  • 支持更多 AI 提供商

试一试

pip install commitgpt-nikesh

GitHub:

欢迎在评论中留下反馈 —— 你希望接下来看到哪些功能?

0 浏览
Back to Blog

相关文章

阅读更多 »

精确编辑关键时使用的 Vim 命令

解决实际使用摩擦的 Vim 小技巧 每个 Vim 用户都会随着时间积累个人工具箱。下面的命令是我不断碰到的——而不是教程中出现的……