# Commit Message Instructions (Conventional Commits) Commit messages should follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/). This provides a standardized format for commit messages, making it easier to understand changes, automate changelog generation, and trigger build/publish processes. ## Format The commit message structure is as follows: ``` [optional scope]: [optional body] [optional footer(s)] ``` --- ### Components 1. **Type**: Indicates the kind of change introduced by the commit. Must be one of the allowed types (see below). 2. **Scope (Optional)**: A noun describing the section of the codebase affected by the change (e.g., `auth`, `ui`, `build`). Enclosed in parentheses. 3. **Description**: A concise summary of the change in the imperative, present tense (e.g., "add login feature", not "added login feature" or "adds login feature"). Starts with a lowercase letter and should not end with a period. Max 72 characters recommended for the entire header line (`[optional scope]: `). 4. **Body (Optional)**: A more detailed explanation of the changes. Use the imperative, present tense. Explain the _what_ and _why_ vs. _how_. Separate from the description by a blank line. Wrap lines at 72 characters. 5. **Footer(s) (Optional)**: Contains additional metadata. Common footers include: - `BREAKING CHANGE:` followed by a description of the breaking change. A `!` can also be appended to the type/scope (`feat!:`) to indicate a breaking change. - Issue references (e.g., `Refs: #123`, `Closes: #456`). Separate from the body by a blank line. --- ### Allowed Types - **feat**: A new feature for the user. - **fix**: A bug fix for the user. - **build**: Changes that affect the build system or external dependencies (e.g., gulp, broccoli, npm). - **chore**: Other changes that don't modify src or test files (e.g., updating dependencies, build tasks). - **ci**: Changes to CI configuration files and scripts (e.g., Travis, Circle, BrowserStack, SauceLabs). - **docs**: Documentation only changes. - **perf**: A code change that improves performance. - **refactor**: A code change that neither fixes a bug nor adds a feature. - **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc). - **test**: Adding missing tests or correcting existing tests. --- ### Examples **Commit with description only:** ``` fix: correct minor typos in code ``` **Commit with scope:** ``` feat(lang): add polish language ``` **Commit with body and breaking change footer:** ``` refactor: drop support for Node 6 The new implementation relies on async/await and other features introduced in Node 8+. BREAKING CHANGE: refactor to use JavaScript features not available in Node 6. ``` **Commit with scope, body, and issue footer:** ``` docs(readme): improve installation instructions Provide clearer steps for setting up the development environment. Add links to prerequisite tools. Closes: #12 ``` **Commit with `!` for breaking change:** ``` feat(api)!: send an email to the customer when a product is shipped ```