Skip to main content

How We Branch and Commit

Type: ReferenceCreated: Team: Platform
draft

Branch naming

Every branch is named the same way, so anyone can tell what it's for at a glance:

feat/123-signup-page

It has three parts:

  1. What kind of work it is — a short prefix (see the table).
  2. The issue or ticket number — the issue this work tracks (here, 123).
  3. A short description — a few lowercase words joined by dashes. Keep it brief.

Pick the prefix that matches your work:

PrefixUse it for
feat/A new feature or improvement
fix/Fixing a bug someone reported
hotfix/An urgent fix that can't wait for the normal flow
chore/Work that isn't app code — dependencies, config, docs
experiment/A quick experiment you don't plan to merge

Commit messages

A commit message starts with a short label for the kind of change, then a plain description:

feat(signin): add login screens

In that example, feat is the kind of change, (signin) is the area it touches (optional), and the rest describes what you did. Most of your commits will use one of these labels:

  • feat — a new feature
  • fix — a bug fix
  • docs — documentation only
  • chore — maintenance that doesn't change how the app behaves
  • refactor — reworking code without changing what it does
  • test — adding or updating tests

If one line isn't enough, leave a blank line and add more detail underneath.

Details
LabelFor
featA new feature
fixA bug fix
choreRoutine maintenance that doesn't change source code
docsDocumentation-only changes
styleFormatting that doesn't change meaning (whitespace, etc.)
refactorReworking code without changing what it does
testAdding or changing tests
perfA change that improves performance
buildChanges to the build system or dependencies
ciChanges to CI/CD
revertReverting an earlier change
config / setupChanges to configuration or setup steps
securitySecurity improvements
localizeTranslation / language changes
wipWork in progress — part of unfinished work

This style is called Conventional Commits, if you'd like to read more about it.

Breaking changes

If your change breaks something other code relies on, add a ! after the label and explain it at the bottom of the message:

feat(api)!: change the users list endpoint url

BREAKING CHANGE: the old '/api/v1/users' endpoint no longer works.

What's checked for you, and what isn't

Some of this is automatic; the rest is on you.

  • Formatting and linting are checked. Some repos tidy formatting when you commit, and every PR has to pass npm run format and npm run check-lint (or mvn spring-javaformat:apply for Java). A PR that fails these won't be merged.
  • The commit message isn't checked by any tool — nothing will catch a wrong label automatically. So follow the format yourself; reviewers look for it.

Main branches and flow

note

Open question — the source/destination branch strategy (which long-lived branches exist, and where feature branches merge) isn't written down: the core repo's CONTRIBUTING.md leaves its "Main Branches" and "Gitflow" sections as empty placeholders. Document the actual flow here before publishing rather than assuming a standard gitflow.