conventional-commits
SafeGit & GitHub
Format commit messages using the Conventional Commits specification.
SKILL.md
# Conventional Commits
Format all commit messages according to the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification. This enables automated changelog generation, semantic versioning, and better commit history.
## Format Structure
```
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
```
## Commit Types
### Required Types
- **`feat:`** - A new feature (correlates with MINOR in Semantic Versioning)
- **`fix:`** - A bug fix (correlates with PATCH in Semantic Versioning)
### Common Additional Types
- **`docs:`** - Documentation only changes
- **`style:`** - Code style changes (formatting, missing semicolons, etc.)
- **`refactor:`** - Code refactoring without bug fixes or new features
- **`perf:`** - Performance improvements
- **`test:`** - Adding or updating tests
- **`build:`** - Build system or external dependencies changes
- **`ci:`** - CI/CD configuration changes
- **`chore:`** - Other changes that don't modify src or test files
- **`revert:`** - Reverts a previous commit
## Scope
An optional scope provides additional contextual information about the section of the codebase:
```
feat(parser): add ability to parse arrays
fix(auth): resolve token expiration issue
docs(readme): update installation instructions
```
## Description
- Must immediately follow the colon and space after the type/scope
- Use imperative mood ("add feature" not "added feature" or "adds feature")
- Don't capitalize the first letter
- No period at the end
- Keep it concise (typically 50-72 characters)
## Body
- Optional longer description providing additional context
- Must begin one blank line after the description
- Can consist of multiple paragraphs
- Explain the "what" and "why" of the change, not the "how"
## Breaking Changes
Breaking changes can be indicated in two ways:
### 1. Using `!` in the type/scope
```
feat!: send an email to the customer when a product is shipped
feat(api)!: send an email to the customer when a product is shipped
```
### 2. Using BREAKING CHANGE footer
```
feat: allow provided config object to extend other configs
BREAKING CHANGE: `extends` key in config file is now used for extending other config files
```
### 3. Both methods
```
chore!: drop support for Node 6
BREAKING CHANGE: use JavaScript features not available in Node 6.
```
## Examples
### Simple feature
```
feat: add user authentication
```
### Feature with scope
```
feat(auth): add OAuth2 support
```
### Bug fix with body
```
fix: prevent racing of requests
Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.
Remove timeouts which were used to mitigate the racing issue but are
obsolete now.
```
### Breaking change
```
feat!: migrate to new API client
BREAKING CHANGE: The API client interface has changed. All methods now
return Promises instead of using callbacks.
```
### Documentation update
```
docs: correct spelling of CHANGELOG
```
### Multi-paragraph body with footers
```
fix: prevent racing of requests
Introduce a request id and a reference to latest request. Dismiss
incoming responses other than from latest request.
Remove timeouts which were used to mitigate the racing issue but are
obsolete now.
Reviewed-by: Z
Refs: #123
```
## Guidelines
1. **Always use a type** - Every commit must start with a type followed by a colon and space
2. **Use imperative mood** - Write as if completing the sentence "If applied, this commit will..."
3. **Be specific** - The description should clearly communicate what changed
4. **Keep it focused** - One logical change per commit
5. **Use scopes when helpful** - Scopes help categorize changes within a codebase
6. **Document breaking changes** - Always indicate breaking changes clearly
## Semantic Versioning Correlation
- **`fix:`** ā PATCH version bump (1.0.0 ā 1.0.1)
- **`feat:`** ā MINOR version bump (1.0.0 ā 1.1.0)
- **BREAKING CHANGE** ā MAJOR version bump (1.0.0 ā 2.0.0)
## When to Use
Use this format for:
- All git commits
- Commit message generation
- Pull request merge commits
- When the user asks about commit messages or git commits
## Common Mistakes to Avoid
ā `Added new feature` (past tense, capitalized)
ā
`feat: add new feature` (imperative, lowercase)
ā `fix: bug` (too vague)
ā
`fix: resolve null pointer exception in user service`
ā `feat: add feature` (redundant)
ā
`feat: add user profile page`
ā `feat: Added OAuth support.` (past tense, period)
ā
`feat: add OAuth support`