Commit Message Generator
Generate clear, conventional commit messages from git diffs.
Quick Start
Analyze staged changes and generate message:
git diff --staged
Then generate message following conventional commits format
Instructions
Step 1: Analyze Changes
Review the git diff to understand:
-
What files changed
-
What functionality was added/modified/removed
-
Scope of changes (component, module, feature)
-
Breaking changes or deprecations
git diff --staged
or for specific files
git diff --staged path/to/file
Step 2: Determine Commit Type
feat: New feature
-
Adding new functionality
-
New user-facing capability
-
New API endpoint
fix: Bug fix
-
Fixing a bug
-
Correcting behavior
-
Resolving an issue
docs: Documentation
-
README updates
-
Code comments
-
API documentation
style: Code style
-
Formatting changes
-
Missing semicolons
-
Whitespace changes
-
No code logic changes
refactor: Code refactoring
-
Restructuring code
-
No functionality change
-
Performance improvements
test: Tests
-
Adding tests
-
Updating tests
-
Test infrastructure
chore: Maintenance
-
Dependency updates
-
Build configuration
-
CI/CD changes
-
Tooling updates
perf: Performance
-
Performance improvements
-
Optimization changes
ci: CI/CD
-
CI configuration
-
Build scripts
-
Deployment changes
build: Build system
-
Build tool changes
-
External dependencies
revert: Revert
- Reverting previous commit
Step 3: Identify Scope
Scope indicates what part of codebase changed:
-
Component name: (button) , (navbar)
-
Module name: (auth) , (api)
-
Feature area: (payments) , (search)
-
Package name: (core) , (utils)
Optional but recommended for clarity.
Step 4: Write Description
Subject line (first line):
-
Use imperative mood ("add" not "added")
-
No period at end
-
Max 50-72 characters
-
Lowercase after type
-
Clear and concise
Body (optional, after blank line):
-
Explain what and why, not how
-
Wrap at 72 characters
-
Use bullet points for multiple changes
-
Reference issues/tickets
Footer (optional):
-
Breaking changes: BREAKING CHANGE: description
-
Issue references: Closes #123 , Fixes #456
-
Co-authors: Co-authored-by: Name <email>
Step 5: Format Message
Basic format:
<type>(<scope>): <description>
[optional body]
[optional footer]
Examples:
feat(auth): add JWT token refresh mechanism
Implement automatic token refresh when access token expires. Tokens are refreshed 5 minutes before expiration.
Closes #234
fix(api): handle null response in user endpoint
Previously crashed when user data was null. Now returns 404 with appropriate error message.
Fixes #567
docs(readme): update installation instructions
Add prerequisites section and troubleshooting guide.
refactor(utils): simplify date formatting logic
Extract common date operations into helper functions. No functionality changes.
chore(deps): upgrade react to v18.2.0
Update react and react-dom dependencies. Update tests to match new API.
Common Patterns
Multiple changes in one commit:
feat(dashboard): add user analytics and export
- Add analytics charts for user activity
- Implement CSV export functionality
- Add date range filter
Closes #123, #124
Breaking change:
feat(api)!: change authentication endpoint structure
BREAKING CHANGE: Auth endpoints now use /v2/auth prefix. Update client code to use new endpoints.
Migration guide: docs/migration-v2.md
Revert commit:
revert: feat(auth): add JWT token refresh
This reverts commit abc123def456. Reason: Causing issues in production.
Co-authored commit:
feat(search): implement fuzzy search algorithm
Co-authored-by: Jane Doe <jane@example.com>
Commit Message Quality
Good commit messages:
-
Clear and descriptive
-
Explain why, not just what
-
Reference related issues
-
Follow conventions consistently
-
Atomic (one logical change)
Bad commit messages:
-
"fix stuff"
-
"WIP"
-
"updates"
-
"asdf"
-
"fix fix fix"
Workflow Integration
Before committing:
-
Review changes: git diff --staged
-
Ensure changes are atomic
-
Generate appropriate message
-
Commit: git commit -m "type(scope): description"
For detailed commits:
-
Stage changes: git add files
-
Open editor: git commit
-
Write multi-line message
-
Save and close
Amending last commit:
git commit --amend
Edit message in editor
Interactive staging:
git add -p # Stage hunks interactively git commit # Write message for staged changes
Conventional Commits Spec
Format: <type>[optional scope]: <description>
Required:
-
type: Must be one of the defined types
-
description: Brief summary of change
Optional:
-
scope: Component/module affected
-
body: Detailed explanation
-
footer: Breaking changes, issue references
Rules:
-
Type must be lowercase
-
Scope in parentheses
-
Colon and space after scope
-
Description starts lowercase
-
No period at end of description
-
Body separated by blank line
-
Footer separated by blank line
Advanced
For complex scenarios:
-
Multi-commit features
-
Monorepo commit conventions
-
Automated commit message validation
-
Commit message templates
-
Semantic versioning integration