When collaborating on a software project, clear and standardized commit messages play a vital role in ensuring the codebase remains maintainable and easy to understand. One widely-adopted approach is the Conventional Commits specification, which categorizes commits based on their purpose. Here’s a breakdown of commonly used types:
1. fix: For Bug Fixes
Use this type when you’re resolving an issue or bug in the code.
Example:
fix: resolve crash when submitting empty form
This communicates that the commit resolves a specific issue in the code, helping teams track bug fixes efficiently.
2. feat: For New Features
Use this type to introduce new functionality to the project.
Example:
feat: add user authentication functionality
This indicates a significant addition, which may impact the project’s functionality.
3. refactor: For Code Restructuring
When reorganizing or improving the code without adding new features or fixing bugs, use this type.
Example:
refactor: simplify user validation logic
This signals to reviewers and contributors that the changes are structural, with no effect on behavior.
4. build: For Build System Changes
For modifications related to the build system or external dependencies (e.g., package updates), use this type.
Example:
build: update webpack to version 5.0
This ensures clarity when tracing issues related to building or running the application.
5. ci: For CI/CD Configuration Changes
When altering continuous integration (CI) or continuous deployment (CD) scripts or configuration files, use this type.
Example:
ci: add linting step to GitHub Actions
This type helps track improvements to the automation process.
6. docs: For Documentation Changes
Use this type exclusively for documentation updates.
Example:
docs: update README with setup instructions
This ensures that documentation improvements are clearly distinguishable from code changes.
7. perf: For Performance Optimizations
For commits aimed at improving application performance, use this type.
Example:
perf: optimize database query for user data
This helps prioritize performance enhancements during reviews.
8. style: For Code Formatting Fixes
Use this type when making formatting changes (e.g., fixing lint errors, adjusting indentation) without altering code behavior.
Example:
style: fix indentation in user service file
This type maintains code readability without confusing it with functional changes.
9. test: For Tests
When adding or modifying tests, use this type.
Example:
test: add unit tests for login component
This helps the team track test coverage and reliability improvements.
Why Follow Conventional Commits?
- Improved Collaboration: Commit messages are clear and structured, making them easier to understand.
- Changelog Generation: Tools like
commitlint
andsemantic-release
can automatically generate changelogs based on commit types. - Traceability: It’s easier to identify what kind of change was made and why, improving debugging and project management.
By adhering to these guidelines, teams can maintain a clean and professional codebase that scales well over time.