A well-written commit message is a permanent record that explains why a change was made — it is the first thing a reviewer reads and the primary reference when debugging a regression months later. These guidelines define the exact format Odoo uses for commit messages, branch names, and the overall PR workflow.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/odoo/documentation/llms.txt
Use this file to discover all available pages before exploring further.
Initial Git configuration
Set your identity consistently across all repositories. Use the same email address registered on GitHub so commits are attributed correctly:Commit message structure
Every commit message has four parts: tag, module, short description, and an optional long description.Commit tags
The tag is a required prefix that categorises the purpose of every commit:[FIX]
Bug fixes. Used primarily in stable versions, but also valid for fixing a recent bug in the development version.
[IMP]
Improvements. The most common tag for incremental changes in the development version.
[ADD]
Adding new modules to the codebase.
[REF]
Refactoring — when a feature is substantially rewritten without changing its external behaviour.
[REM]
Removing resources: dead code, views, modules, deprecated assets.
[MOV]
Moving files. Use
git mv and do not change file content in the same commit — Git may lose track of file history if you do both at once.[REV]
Reverting a previous commit that caused issues or was not wanted.
[REL]
Release commits for new major or minor stable versions.
[MERGE]
Merge commits — used in forward-porting bug fixes and as the main commit for features involving several separate commits.
[PERF]
Performance patches.
[CLN]
Code cleanup — improving readability or structure without behaviour changes.
[LINT]
Linting passes — whitespace, import order, and formatting only.
[I18N]
Changes to translation files (
.po, .pot).[CLA]
Signing the Odoo Individual Contributor License Agreement.
Module name
After the tag, specify the technical name of the module being modified (use the technical name, not the user-facing name, because the latter can change over time):various:
Avoid modifying code across several modules in the same commit unless necessary. Cross-module commits make it harder to understand each module’s history and to revert a change in isolation.
Writing the commit message header
The header is the single line after[TAG] module:. It must be:
- Self-explanatory — include the reason for the change, not just what changed.
- Under ~50 characters — this keeps
git log --onelinereadable. - A valid sentence when prefixed with “if applied, this commit will …”.
Writing the full description
The body of the commit message should focus on why, not what. The diff already shows what changed. Good things to include in the description:- The business or technical problem being solved.
- The reasoning behind any non-obvious technical decision.
- A summary of the approach taken, if multiple approaches were considered.
- References: task numbers, PR numbers, OPW tickets.
Real commit message examples
Branch naming
Branches must be prefixed with the base version branch they target:Contributions targeting an unsupported version of Odoo are not accepted. Verify your target branch is actively maintained before starting work.
Pushing and opening a pull request
External contributors push to their fork (remote aliasdev):
origin):
Click 'compare across forks'
External contributors select their forked repository as the head. Odoo employees leave the head as
odoo/odoo.Allow maintainer edits
Tick Allow edits from maintainer so the Odoo team can make minor fixes directly on your branch. Skip this step if you work at Odoo.
PR review process
- CI checks run automatically. Fix any failures before requesting review.
- A member of the Odoo team is automatically assigned as reviewer once the PR is marked ready.
- The reviewer may post comments — all comments must be addressed before the PR can be merged. You will receive email notifications for new comments.
- Once approved, the reviewer merges the PR.