
Team workflow #
A reference process for parallel teams built on the implemented features: branches, protected branches, merge requests, rebase, cherry-pick, and branch-bound deployment packages. Adapt branch names to your tenant.
Branch layout #
flowchart TB mainNode["main / PROD"] preprod["preprod / PREPROD"] devA["dev-a / DEV-A"] devB["dev-b / DEV-B"] featA1["feature/A-1"] featB1["feature/B-1"] hotfix["hotfix/..."] mainNode --> preprod preprod --> devA preprod --> devB devA --> featA1 devB --> featB1 mainNode --> hotfix
Recommended setup:
- Mark
main,preprod, anddev-*as protected so they change only through merge requests. - Set Required approvals per branch, for example 1 on
dev-*(team lead), 2 onpreprodandmain. - Keep feature and hotfix branches unprotected so developers can edit and push directly.
Happy path #
- Create
feature/...fromdev-a. - Select the feature branch in the project tree, edit and push.
- Before opening an MR, Rebase from parent to pick up recent changes on
dev-aand resolve conflicts locally. - Create MR feature → dev-a; the team lead reviews and approves; click Merge.
- Update deployment package on
dev-aand deploy it to DEV-A. - Create MR dev-a → preprod; the release manager resolves cross-team conflicts and approves; Merge; deploy PREPROD.
- Other teams absorb the changes with an MR preprod → dev-b (protected branches cannot be rebased); their unprotected feature branches can then use Rebase from parent.
- Create MR preprod → main; approve; Merge; deploy PROD.
Conflict ownership #
| Merge | Typical resolver |
|---|---|
Feature → dev-X | Team lead |
Forward merge preprod → dev-X (MR) | Team lead |
dev-X → preprod | Release manager |
preprod → main | Release manager |
Protected branches cannot be rebased. To bring parent changes into a protected branch, create a merge request from the parent into it.
Hotfix #
- Create
hotfix/...frommain. - Fix and push on the hotfix branch.
- MR hotfix → main, approve, merge, deploy PROD.
- MRs main → preprod and preprod → dev-* so the fix reaches ongoing development; unprotected feature branches then rebase from their parent.
Moving selected elements #
Use Cherry-pick on an unprotected branch to take individual elements from another branch, for example to reuse a finished table from a sibling feature without merging the whole feature.
Limits to plan for #
- Merge is always a manual click after approval.
- Merge requests are not marked stale automatically when branches move; re-check the diff before merging.
- Environments are not linked to branches; deployment is done through packages.