Automatically generates, formats, organizes, and improves git commit messages by analyzing your staged changes using AI. Use this skill when you want to create, write, review, or refine commit messages - whether you need to save time, maintain consistent formatting, or better describe your code changes.
Installation
Details
Usage
After installing, this skill will be available to your AI coding assistant.
Verify installation:
skills listSkill Instructions
name: commit-message description: Automatically generates, formats, organizes, and improves git commit messages by analyzing your staged changes using AI. Use this skill when you want to create, write, review, or refine commit messages - whether you need to save time, maintain consistent formatting, or better describe your code changes.
Generating Commit Messages
Step-by-Step Instructions
Installation
-
Run the install script to download and set up CodeGPT:
bash < <(curl -sSL https://raw.githubusercontent.com/appleboy/CodeGPT/main/install.sh) -
Configure your AI provider in
~/.config/codegpt/.codegpt.yaml:openai: provider: openai # or: azure, anthropic, gemini, ollama, groq, openrouter api_key: your_api_key_here model: gpt-4o
Basic Usage
-
Stage your changes:
git add <files> -
Generate and commit with AI-generated message:
codegpt commit --no_confirmNote:
- Commit messages are generated in English by default. Use
--langto specify a different language. - You don't need to manually run
git diffto review your changes. CodeGPT automatically reads the staged changes and analyzes them to generate an appropriate commit message.
- Commit messages are generated in English by default. Use
Advanced Options
-
Set language: Use
--langto specify output language (default: en)codegpt commit --lang zh-tw --no_confirm # For Traditional Chinese codegpt commit --lang zh-cn --no_confirm # For Simplified ChineseTo change the default language permanently:
codegpt config set output.lang en # or zh-tw, zh-cn -
Use specific model: Override the default model
codegpt commit --model gpt-4o --no_confirm -
Exclude files: Ignore certain files from the diff analysis
codegpt commit --exclude_list "*.lock,*.json" --no_confirm -
Custom templates: Format messages according to your team's style, including Jira issue tracking
# Basic custom format codegpt commit --template_string "[{{.summarize_prefix}}] {{.summarize_title}}" --no_confirm # With Jira issue number using template variables codegpt commit --template_vars "JIRA_NUM=GAIA-2704" \ --template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}\n\n{{.summarize_message}}" \ --no_confirmAvailable built-in template variables:
{{.summarize_prefix}}- Conventional commit type (feat, fix, docs, etc.){{.summarize_title}}- The commit title{{.summarize_message}}- The full commit message body
You can define custom variables with
--template_vars "KEY=VALUE"and use them as{{.KEY}} -
Amend commit: Update the previous commit message
codegpt commit --amend --no_confirm
Examples of Inputs and Outputs
Example 1: Adding a new feature
Input:
# After making changes to add user authentication
git add src/auth.go src/middleware.go
codegpt commit --no_confirm
Output:
feat: add user authentication middleware
Implement JWT-based authentication system with login and token validation
middleware for protecting API endpoints.
Example 2: Fixing a bug
Input:
# After fixing a null pointer error
git add src/handlers/user.go
codegpt commit --no_confirm
Output:
fix: resolve null pointer exception in user handler
Add nil checks before accessing user object properties to prevent crashes
when processing requests with missing user data.
[Preview shown, waiting for confirmation...]
Example 3: Chinese language commit
Input:
git add docs/README.md
codegpt commit --lang zh-tw --no_confirm
Output:
docs: 更新專案說明文件
新增安裝步驟說明以及使用範例,讓新使用者能夠快速上手。
Example 4: Jira issue tracking integration
Input:
# Stage your changes
git add Dockerfile docker-compose.yml
# Generate commit with Jira issue number using template variables
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" \
--template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}
{{.summarize_message}}" \
--no_confirm
Output:
feat(GAIA-2704): update trivy scan for cicd
- Add appuser (uid=1000) to run containers as non-root user
- Fix trivy scan DS002: Image user should not be 'root'
- Create /.app directory with proper ownership for externalimage
Tip: Save the template in config file to avoid typing it every time:
# Set the template once
codegpt config set git.template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}
{{.summarize_message}}"
# Then just provide the Jira number when committing
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" --no_confirm
Example 5: Excluding lock files
Input:
git add .
codegpt commit --exclude_list "package-lock.json,yarn.lock,go.sum" --no_confirm
Output:
refactor: reorganize project structure
Move utility functions into separate packages and update import paths
throughout the codebase for better modularity.
(Lock files excluded from analysis)
Common Edge Cases
No staged changes
Issue: Running codegpt commit without staging any changes.
Solution: Stage your changes first:
git add <files>
codegpt commit
API timeout for large diffs
Issue: Large changesets may cause API timeouts.
Solution: Increase timeout or commit changes in smaller batches:
codegpt commit --timeout 60s --no_confirm
Generated files in diff
Issue: Lock files or generated code affecting commit message quality.
Solution: Exclude these files from analysis:
codegpt commit --exclude_list "package-lock.json,yarn.lock,*.min.js,dist/*" --no_confirm
API key not configured
Issue: Error message about missing API key.
Solution: Set up your API key in the config file:
codegpt config set openai.api_key "your-api-key-here"
Custom commit format required
Issue: Team requires specific commit message format with Jira issue tracking numbers.
Solution: Use --template_vars with custom templates.
Basic usage:
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" \
--template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}
{{.summarize_message}}" \
--no_confirm
# Result: feat(GAIA-2704): update trivy scan for cicd
Save template in config for convenience:
# Set the template once
codegpt config set git.template_string "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}
{{.summarize_message}}"
# Then just provide the Jira number
codegpt commit --template_vars "JIRA_NUM=GAIA-2704" --no_confirm
Or edit ~/.config/codegpt/.codegpt.yaml:
git:
template_string: "{{.summarize_prefix}}{{if .JIRA_NUM}}({{.JIRA_NUM}}){{end}}: {{.summarize_title}}\n\n{{.summarize_message}}"
Create a shell function for convenience:
Add to your ~/.bashrc or ~/.zshrc:
function commit() {
if [ -z "$1" ]; then
echo "Usage: commit <JIRA-NUM>"
return 1
fi
codegpt commit --template_vars "JIRA_NUM=$1" --no_confirm
}
# Usage: commit GAIA-2704
Auto-extract from git branch name (advanced):
If your branch follows naming convention like feature/GAIA-2704-add-security-scan:
# Add to ~/.bashrc or ~/.zshrc
function commit-auto() {
local branch=$(git rev-parse --abbrev-ref HEAD)
local jira_num=$(echo "$branch" | grep -oE '[A-Z]+-[0-9]+' | head -1)
if [ -z "$jira_num" ]; then
echo "No Jira issue found in branch: $branch"
codegpt commit --no_confirm
else
echo "Detected Jira issue: $jira_num"
codegpt commit --template_vars "JIRA_NUM=$jira_num" --no_confirm
fi
}
# Usage: commit-auto (auto-detects GAIA-2704 from branch name)
Network proxy required
Issue: API calls fail due to corporate firewall.
Solution: Configure proxy settings:
codegpt commit --proxy http://proxy.company.com:8080
# Or for SOCKS proxy
codegpt commit --socks socks5://127.0.0.1:1080