This document outlines the versioning and release strategy for managing features and fixes in a structured and scalable manner.
- main: Stable production branch.
- develop: Active development branch for integrating features and fixes before production release.
- feature branches: Created off
developormaindepending on the use case. - release branches: Cut from
mainfor tagging releases.
Purpose: Add new features that do not break existing functionality.
Flow:
- Fork feature branch from
develop - Work on
feat/xyz - Merge (preferably squash) into
develop - From
develop, merge intomain - Create a
release/v1.x.0tag onmain - Back-merge into
develop(if required) - Pre-release optional at any point before final merge to
main
Purpose: Introduce breaking changes.
Flow:
- Fork feature branch from
develop - Work on
feat-nbc/xyz - Merge (squash) into
develop - From
develop, create a fork tomain - Release version as
vx.0.0frommain - Back-merge changes into
develop - Pre-release allowed before merging into
main
Purpose: Apply hotfixes or patches to the latest release.
Flow:
- Fork fix branch from
develop - Work on
fix/xyz - Merge into
main - Release as
v1.3.x(or relevant patch version) - Back-merge fix into
develop - Pre-release optional
Purpose: Apply fixes that are relevant to both latest and legacy versions.
Flow:
- Fork fix branch from
develop - Work on
fix/xyz - Merge into
main - Create new release branch (e.g.,
release/v2.3.x) - Back-merge into
develop - Cherry-pick relevant fix commits to older release branch (e.g.,
release/v1.8.5) - Release both new (
v2.3.x) and patched old (v1.8.y) versions - Pre-release at any point before final tagging
- vMAJOR.MINOR.PATCH for regular releases.
- vx.0.0 for breaking changes.
- Pre-releases should be tagged with
-alpha,-beta, or-rcsuffixes (e.g.,v1.2.0-beta.1).
- Use squash merges for feature/fix branches into
develop. - Use regular merges for integrating into
main. - Use back-merges from
mainintodeveloppost-release to sync state. - Use cherry-picks for applying selective fixes to older release branches.
| Use Case | Base Branch | Merge Target | Release Format | Notes |
|---|---|---|---|---|
| Backward-Compatible Feature | develop |
main |
v1.x.0 |
squash merge, back-merge needed |
| Non-Backward-Compatible Feature | develop |
main |
vx.0.0 |
new major release, fork first |
| Latest Version Fix | develop |
main |
v1.x.y |
bugfix, back-merge to develop |
| Multi-Version Fix | develop |
main, older |
v2.x.y, v1.x.y |
cherry-pick for older release |



