Git Commit with Conventional Commits
Overview
Create standardized, semantic git commits using the Conventional Commits specification. Analyze the actual diff to determine appropriate type, scope, and message.
Conventional Commit Format
<type>(optional scope): <description>
[optional body]
[optional footer(s)]Breaking Changes
# Exclamation mark after type/scope
feat!: remove deprecated endpoint
# BREAKING CHANGE footer
feat: allow config to extend other configs
BREAKING CHANGE: `extends` key behavior changedCommit Types
| Type | Purpose |
|---|---|
feat | New feature |
fix | Bug fix |
docs | Documentation only |
style | Formatting/style (no logic) |
refactor | Code refactor (no feature/fix) |
perf | Performance improvement |
test | Add/update tests |
build | Build system/dependencies |
ci | CI/config changes |
chore | Maintenance/misc |
revert | Revert commit |
Workflow
1. Analyze Diff
# Check status first
git status --porcelain
# If nothing to commit, stop and inform the user
# If files are staged, use staged diff
git diff --staged
# If nothing staged, use working tree diff
git diff2. Stage Files (if needed)
If nothing is staged or you want to group changes differently:
# Stage specific files
git add path/to/file1 path/to/file2
# Stage by pattern
git add *.test.*
git add src/components/*
# Interactive staging
git add -pNever commit secrets (.env, credentials.json, private keys).
3. Generate Commit Message
Analyze the diff to determine:
- Type: What kind of change is this?
- Scope: What area/module is affected?
- Description: One-line summary of what changed (present tense, imperative mood, <72 chars)
4. Execute Commit
# Single line
git commit -m "<type>(scope): <description>"
# Multi-line with body/footer
git commit -m "<type>(scope): <description>" \
-m "<optional body>" \
-m "<optional footer>"5. Output
After a successful commit, display:
✔ <type>(scope): <description>
commit <short-hash>If the commit fails (hook rejection), report the hook output and stop — do not retry or amend.
Best Practices
- Write commit messages in English
- One logical change per commit
- Present tense: "add" not "added"
- Imperative mood: "fix bug" not "fixes bug"
- Keep description under 72 characters
- Reference issues when applicable:
Closes #123,Refs #456
Git Safety Protocol
- NEVER update git config
- NEVER run destructive commands (--force, hard reset) without explicit request
- NEVER skip hooks (--no-verify) unless user asks
- NEVER force push to main/master
- NEVER add
Co-Authored-Bytrailers (e.g.Co-Authored-By: Claude...). Commits must always appear under the developer's name only - If commit fails due to hooks, fix and create NEW commit (don't amend)