📦 AI Git CLI:让 AI 帮你写 Commit 和 MR

65 阅读3分钟

一、痛点:重复而机械的 Git 工作流

每次开发新需求,你是否也要重复这一套流程?

  1. 拉取最新主分支
  2. 创建新分支 feat/xxx
  3. 写代码
  4. 提交:
git commit -m "feat: xxxxx"  # 还得想怎么写
git push origin feat/xxx
  1. 去 GitLab 手动新建 Merge Request
  2. 还可能需 rebase 主分支:
git checkout main
git pull origin main
git checkout feat/xxx
git rebase main

这些操作重复、琐碎,且 Commit 消息写起来费神MR 描述更难写全面

二、解决方案:AI CLI —— 一条龙自动化

因此我开发了一个 Git + AI 命令行工具,帮你自动化以上流程,并让 AI 生成规范的 Commit 和 MR 描述。

命令功能适用场景
ai git commitrebase + commit + push + 创建 MR完整流程,确保代码与主分支同步
ai git mrcommit + push + 创建 MR已有本地更改,直接提交并提 MR
ai git addadd + commit(可选 push)仅提交到本地,暂不提 MR

三、技术实现亮点

 1. 智能生成 Commit 消息

通过 git diff --cached 获取暂存区改动,发送给 AI(使用token调用AI接口),生成符合 Conventional Commits 格式的消息。

prompt

请分析以下代码改动,生成一个简洁的 commit message(格式:type: description)。

要求:
1. 使用常见的 commit type(feat, fix, docs, style, refactor, test, chore)
2. 描述要简洁明了,不超过 50 个字
3. 只输出 commit message,不要其他说明

代码改动:${diff}

2. 自动创建 MR(使用 GitLab CLI glab

  • 检查是否已有 MR
  • 获取与主分支的 diff 和 log
  • 调用 AI 生成 标题 + 详细描述(含改动点、影响范围、风险)

3. 防止 AI Token 超限

  • Commit 时:对 diff 长度截断
  • MR 时:仅提取关键文件(新增文件或修改函数超过50行的文件)

4. 健壮的 Git 操作封装

  • 自动检测主分支(main/master)
  • 支持 stash → rebase → pop 流程,处理冲突中断
  • 使用 git status --porcelain 解析状态,避免人工解析输出

5. 多环境配置支持

通过 dotenv 按优先级加载 .env 文件,方便在不同目录下使用。


四、示例流程

使用 ai git commit

# 1. 在 feat/0130 分支开发完毕
# 2. 一键完成:
ai git commit --main-branch main

# 工具会:
# ✅ 拉取最新 main
# ✅ stash → rebase → pop(如有冲突会暂停)
# ✅ 自动 add
# ✅ AI 生成 commit message(可编辑确认)
# ✅ 推送分支
# ✅ 创建 MR(AI 生成标题和描述)

五、遇到的问题与解决方案

问题解决方案
AI token 可能超限对 diff 智能截断,只提取关键改动
冲突处理中断流程采用 stash 机制,冲突时中断并提示用户解决
不同项目主分支名不同支持 --main-branch 参数,默认检测 main 或 master
需兼容不同 GitLab 实例使用 glab auth login 提前认证,支持自托管 GitLab

六、未来改进方向

  1. 交互确认:AI 生成的 Commit 和 MR 信息可编辑后再提交
  2. 本地模型支持:接入 Ollama,保护代码隐私,减少 API 调用成本
  3. 多平台支持:除了 GitLab,也支持 GitHub(通过 gh CLI)
  4. Commit 规范校验:在 AI 生成后,自动校验是否符合团队规范
  5. 可视化冲突解决:在 rebase 冲突时提供更友好的解决界面
  6. 错误处理与回滚:在 rebase 或 push 失败时,应有更安全的回滚机制
  7. 配置化:允许用户自定义 AI prompt、Commit 类型映射等
  8. 进度提示:长时间操作(如 AI 调用、网络请求)应有 loading 提示