---
icon: dot
---

## TL;DR

In order to have meaningful commit messages, We follow Conventional Commits. So your commits message should be in this form:

```
<feat|fix|improve|refactor|doc|chore>(<scope>): your message here
```

=== Examples

```
fix(campaign details): correct startDate format
feat(shopping cart): add the amazing button
improve(financial/receipt): add the amazing button
chore: fix install job dependencies
build: update dependencies
refactor: implement calculation method as recursion
style: remove empty line 
```

===

!!! Jira integration

You can include the Jira task id in your commit message as well. See [Jira GitLab integration](../Jira/gitlab-intergration.md)

!!!

## :package: Jet Brains Extension

Use this extension to ease writing commit messages.

[!button icon="package" target="blank" text="Jet Brains Conventional Commit"](https://plugins.jetbrains.com/plugin/13389-conventional-commit)

---

## :gear: Git Commit Message Hook

To ensure our commit message conventions, we can setup a `commit-msg` hook for git. Follow this guide:

[!button icon="commit" target="blank" text="Conventional Commits Git Hook"](https://github.com/tapsellorg/conventional-commits-git-hook)

---


## More on Conventional Commits

[!badge variant="info" icon="link-external" iconAlign="right" target="blank" text="Conventional Commits"](https://www.conventionalcommits.org/)

=== Types

* API relevant changes
    * `feat` Commits, that adds a new feature
    * `fix` Commits, that fixes a bug
* `refactor` Commits, that rewrite/restructure your code, however does not change any behaviour
    * `perf` Commits are special `refactor` commits, that improves performance
* `style` Commits, that do not affect the meaning (white-space, formatting, missing semi-colons, etc)
* `test` Commits, that add missing tests or correcting existing tests
* `docs` Commits, that affect documentation only
* `build` Commits, that affect build components like build tool, ci pipeline, dependencies, project version, ...
* `chore` Miscellaneous commits e.g. modifying `.gitignore`

=== Scopes

The `scope` provides additional contextual information.
* Is an **optional** part of the format
* Allowed Scopes depends on the specific project
* Don't use issue identifiers as scopes

=== Subject

The `subject` contains a succinct description of the change.
* Is a **mandatory** part of the format
* Use the imperative, present tense: "change" not "changed" nor "changes"
* Don't capitalize the first letter
* No dot (.) at the end

=== Body

The `body` should include the motivation for the change and contrast this with previous behavior.
* Is an **optional** part of the format
* Use the imperative, present tense: "change" not "changed" nor "changes"
* This is the place to mention issue identifiers and their relations

=== Footer

The `footer` should contain any information about **Breaking Changes** and is also the place to **reference Issues** that this commit refers to.
* Is an **optional** part of the format
* **optionally** reference an issue by its id.
* **Breaking Changes** should start with the word `BREAKING CHANGES:` followed by space or two newlines. The rest of the commit message is then used for this.

===