Skip to main content

用 AI 生成 Git Commit Message,让提交更高效!

·3 mins

告别烦人的 git commit message 困扰!AI 来帮你搞定 #

在日常开发中,你是否曾经为写一个合适的 commit message 而发愁?尤其是在团队协作中,一个清晰、规范的 commit 记录不仅能提高代码可读性,还能大幅提升团队协作效率。

但现实是:

  • 写好 commit message 需要时间和思考
  • 团队成员的 commit 风格各异,难以统一
  • 在编码状态时,切换到写 commit 会打断思路

本文将介绍一个基于 AI 的解决方案,让你一键生成专业、规范的 commit message,彻底解放你的时间和精力!

为什么要用 AI 生成 Git Commit Message? #

一个好的 commit message 应该具备以下特点:

  1. 清晰表达变更内容 - 让团队成员一眼看出本次提交的目的和影响范围
  2. 遵循规范 - 采用统一格式(如 Conventional Commits),便于自动化处理和版本管理
  3. 简洁明了 - 不冗长但包含必要信息

然而,在紧张的开发过程中,要做到以上几点并不容易。这就是 AI 能发挥作用的地方!

解决方案:AI 驱动的 Git Commit 助手 #

我们将使用 llm CLI 工具结合 deepseek-coder AI 模型,自动分析你的代码变更并生成符合规范的 commit message。

1. 安装必要工具 #

首先,安装 llm 命令行工具:

# 使用 pip 安装
pip install llm

# 或者 Mac 用户可以使用 Homebrew
brew install llm

然后安装并配置 DeepSeek 模型:

# 安装 DeepSeek 插件
llm install llm-deepseek

# 设置 API 密钥
llm keys set deepseek

Enter key:

2. 创建 AI Commit 助手脚本 #

创建一个名为 gcai 的脚本文件:

vi gcai

将以下代码复制到文件中:

#!/bin/bash

# -----------------------------------------------------------------------------
# AI-powered Git Commit Function
# Usage: gcai
# 1) Gets the current staged changes diff.
# 2) Sends them to an LLM to write the git commit message.
# 3) Allows you to easily accept, edit, regenerate, or cancel.
# The `llm` CLI util is awesome; get it here: https://llm.datasette.io/en/stable/

# referece: https://gist.github.com/karpathy/1dd0294ef9567971c1e4348a90d69285
# Unalias gcai if it exists (to prevent conflicts)
# unalias gcai 2>/dev/null
# AI_MODEL=gemini-flash
AI_MODEL=deepseek-coder

# Define the AI-powered gcai function using gemini
generate_commit_message() {
    # Function to generate commit message using the gemini model
    git diff --cached | llm -m ${AI_MODEL} "
Below is a diff of all staged changes, coming from the command:
\`\`\`
git diff --cached
\`\`\`

Use the following format

feat:     A new feature.
fix:      A bug fix.
docs:     Documentation changes.
style:    Code style changes (formatting, missing semicolons, etc.).
refactor: Code refactoring (neither fixes a bug nor adds a feature).
test:     Adding or updating tests.
chore:    Routine tasks like updating dependencies or build tools.
build:    Changes affecting the build system or external dependencies.
ci:       Changes to CI configuration files or scripts.
perf:     Performance improvements.
revert:   Reverting a previous commit.

Please generate a concise, one-line commit message for these changes."
}

# Function to read user input compatibly with both Bash and Zsh
read_input() {
    if [ -n "$ZSH_VERSION" ]; then
        echo -n "$1"
        read -r REPLY
    else
        read -p "$1" -r REPLY
    fi
}

# Main script
echo "Generating AI-powered commit message using ${AI_MODEL}..."
commit_message=$(generate_commit_message)

while true; do
    echo -e "\nProposed commit message:"
    echo "$commit_message"

    read_input "Do you want to (a)ccept, (e)dit, (r)egenerate, or (c)ancel? "
    choice=$REPLY

    case "$choice" in
        a|A )
            if git commit -m "$commit_message"; then
                echo "Changes committed successfully!"
                exit 0
            else
                echo "Commit failed. Please check your changes and try again."
                exit 1
            fi
            ;;
        e|E )
            read_input "Enter your commit message: "
            commit_message=$REPLY
            if [ -n "$commit_message" ] && git commit -m "$commit_message"; then
                echo "Changes committed successfully with your message!"
                exit 0
            else
                echo "Commit failed. Please check your message and try again."
                exit 1
            fi
            ;;
        r|R )
            echo "Regenerating commit message using gemini..."
            commit_message=$(generate_commit_message)
            ;;
        c|C )
            echo "Commit cancelled."
            exit 1
            ;;
        * )
            echo "Invalid choice. Please try again."
            ;;
    esac
done

赋予脚本执行权限:

chmod +x gcai

将脚本移动到你的 PATH 目录中(可选,但推荐):

# 例如移动到 /usr/local/bin
sudo mv gcai /usr/local/bin/

实际使用效果 #

使用非常简单,只需两步:

  1. 暂存你的更改:

    git add .
    
  2. 运行 AI commit 助手:

    gcai
    

AI 生成 Commit Message 示例

交互式选项让你掌控全局 #

生成 commit message 后,你可以:

  • 接受(a) - 直接使用 AI 生成的 message 提交
  • 编辑(e) - 修改后再提交
  • 重新生成(r) - 如果不满意,让 AI 再试一次
  • 取消(c) - 放弃本次提交

为什么这个方案值得一试? #

1. 节省时间和精力 #

不再为写 commit message 而打断编码思路,AI 秒出高质量提交信息。

2. 提高团队协作效率 #

自动遵循 Conventional Commits 规范,使项目历史记录更加清晰、一致。

3. 提升代码质量 #

规范的 commit 记录有助于代码审查、问题追踪和版本管理。

4. 学习最佳实践 #

通过观察 AI 生成的 commit message,你可以学习到更好的提交描述方式。

进阶使用技巧 #

  1. 自定义提示词:你可以修改脚本中的提示词,以适应你团队的特定规范
  2. 切换 AI 模型:可以尝试其他模型如 GPT-4、Claude 等,只需修改 AI_MODEL 变量
  3. 集成到 Git Hooks:可以将此脚本集成到 pre-commit 钩子中,实现更自动化的工作流

总结 #

这个 AI 驱动的 Git Commit 助手能帮你:

  • ⏱️ 节省时间 - 不再为写 commit message 而烦恼
  • 🧠 减少认知负担 - 专注于编码,而不是描述变更
  • 📊 提高一致性 - 自动生成符合规范的 commit 记录
  • 🤝 增强协作 - 让团队成员更容易理解你的代码变更

赶快试试吧,让 AI 成为你的编码助手!🚀

参考资料 #