Commit Format¶
Complete conventional commit specification.
Structure¶
Type (Required)¶
The type describes the category of change:
Available Types¶
| Type | Description | Changelog Section |
|---|---|---|
feat |
New feature | Features |
fix |
Bug fix | Bug Fixes |
docs |
Documentation | Documentation |
style |
Formatting, whitespace | (hidden) |
refactor |
Code restructuring | Refactoring |
perf |
Performance improvement | Performance |
test |
Adding/updating tests | (hidden) |
build |
Build system, dependencies | Build |
ci |
CI/CD configuration | (hidden) |
chore |
Maintenance, tooling | (hidden) |
revert |
Reverting changes | Reverts |
Scope (Optional)¶
The scope provides context about what part of the codebase is affected:
feat(auth): add OAuth2 support
fix(api): handle timeout errors
docs(readme): add installation section
Naming Conventions¶
# Module/package name
feat(parser): add JSON support
fix(validator): handle edge cases
# Feature area
feat(auth): implement 2FA
fix(payments): correct tax calculation
# Component
feat(button): add loading state
fix(modal): prevent scroll lock
Multiple Scopes¶
For changes affecting multiple areas:
# Option 1: Primary scope
feat(api): add user endpoint and update docs
# Option 2: Comma-separated
feat(api,docs): add user endpoint with documentation
Breaking Change Indicator (!)¶
Add ! after the type/scope for breaking changes:
# Without scope
feat!: remove deprecated API
# With scope
feat(api)!: change response format
# Fix with breaking change
fix!: correct calculation (changes results)
Description (Required)¶
A short summary of the change:
feat: add user authentication # Good
feat: Add User Authentication # Bad - capitalized
feat: added user authentication # Bad - past tense
feat: adding user authentication # Bad - gerund
feat: add user authentication. # Bad - period
Guidelines¶
| Do | Don't |
|---|---|
| Use imperative mood | Use past tense |
| Start lowercase | Start uppercase |
| Be concise (<50 chars) | Write paragraphs |
| Omit period at end | End with punctuation |
Good Examples¶
feat: add password reset functionality
fix: prevent race condition in cache
docs: clarify installation requirements
perf: optimize database query performance
refactor: simplify error handling logic
Body (Optional)¶
Provide additional context when the description isn't sufficient:
git commit -m "fix: prevent data loss on connection timeout
The previous implementation would silently drop data when the
connection timed out. This change ensures all data is persisted
to local storage before the connection closes.
Affected endpoints:
- POST /api/data
- PUT /api/data/:id"
When to Use¶
- Explain the why, not the what
- Provide context for complex changes
- List affected areas
- Reference related issues
Formatting¶
Footer (Optional)¶
Footers contain metadata about the commit:
git commit -m "feat: add user dashboard
Implements the new user dashboard with activity feed,
notifications, and quick actions.
BREAKING CHANGE: Dashboard API endpoints have changed.
Closes #123
Reviewed-by: @teammate
Co-authored-by: Partner <partner@example.com>"
Common Footers¶
| Footer | Purpose |
|---|---|
BREAKING CHANGE: |
Describe breaking change |
Closes #123 |
Close GitHub issue |
Fixes #123 |
Fix GitHub issue |
Refs #123 |
Reference issue |
Reviewed-by: |
Credit reviewer |
Co-authored-by: |
Credit co-author |
Breaking Change Footer¶
BREAKING CHANGE: <description>
# Can span multiple lines
BREAKING CHANGE: The authentication API has changed.
Old: POST /auth/login { username, password }
New: POST /auth/login { email, password }
Migration: Update all login calls to use email instead of username.
Complete Examples¶
Simple Feature¶
Feature with Scope¶
feat(ui): add dark mode toggle
Adds a toggle button in the settings panel that switches
between light and dark themes. Theme preference is persisted
in local storage.
Closes #456
Bug Fix¶
fix(api): handle null response from external service
The payment gateway occasionally returns null instead of
an error object. This change adds explicit null checking
and returns a user-friendly error message.
Fixes #789
Breaking Change¶
feat(api)!: migrate to v2 authentication
BREAKING CHANGE: The authentication API has been completely
redesigned. All existing API tokens are invalidated.
Migration steps:
1. Generate new API tokens in the dashboard
2. Update client applications with new tokens
3. Use the new /auth/v2/* endpoints
Old endpoints will return 410 Gone after 2024-06-01.
Closes #321
Reviewed-by: @security-team
Documentation¶
docs(api): add authentication examples
Adds code examples for all authentication methods:
- API key authentication
- OAuth2 authorization code flow
- JWT token refresh
Examples are provided in Python, JavaScript, and cURL.
Performance¶
perf(db): optimize user query with index
Adds a composite index on (user_id, created_at) to speed up
the activity feed query. Reduces query time from ~500ms to ~10ms.
Before: EXPLAIN shows sequential scan
After: EXPLAIN shows index scan
Refs #555
Validation¶
Using Commitlint¶
Install and configure:
Using Pre-commit Hook¶
.pre-commit-config.yaml
repos:
- repo: https://github.com/compilerla/conventional-pre-commit
rev: v3.0.0
hooks:
- id: conventional-pre-commit
stages: [commit-msg]
In CI¶
.github/workflows/lint.yml
- name: Validate PR title
uses: mikeleppane/releasio@v2
with:
command: check-pr
require-scope: 'true'
See Also¶
- Conventional Commits Spec
- Custom Parsers - Non-standard formats
- Semantic Versioning - Version bumps