Project ⏱ 20 min read

07 · Git Flow & Commits

Branch strategy and commit conventions for CLM projects

Why Git Flow?

Multiple developers work on separate tickets simultaneously. Without a clear branching model, main can receive half-finished work, versioned releases are impossible to isolate, and a hotfix drags in unrelated changes. Git Flow assigns a specific purpose to each branch type so all of these concerns stay separated.

Branch Types

BranchBranches fromNamingPurpose
main main Production-only; always stable; tagged on every release
develop main (initial setup) develop Integration branch; latest merged work lives here
feature develop feature/CLM-XXX One ticket per branch; deleted after merge
release develop or main release/X.Y.Z Stabilization buffer before deploy
hotfix release hotfix/CLM-XXX Targeted fix inside a release branch

Branch Flows

Select a scenario and step through the flow. Active lanes are highlighted; inactive ones are dimmed.

main develop release feature hotfix D0 D1 merge feature/CLM-130 F1 F2 bump ver ← release 1.2.0 QA ✓ merge feature/CLM-135 fix v1.2.0 🏷 v1.2.0 🏷 v1.2.1 🏷 🔥 issue ← release release/1.2.1 hotfix/CLM-150 bump ver 1.2.0 Dev A Dev A feature/CLM-200 Dev B Dev B

Press Step or Play to begin.

Commit Format — Commitizen

All commits follow the Conventional Commits spec, enforced via Commitizen (cz commit).

<type>(<scope>): <subject>

[optional body]

[optional footer — BREAKING CHANGE, refs CLM-XXX]
TypeWhen to use
featNew feature
fixBug fix
choreBuild scripts, dependencies, tooling
docsDocumentation only
refactorRefactor with no feat or fix
testAdding or fixing tests
perfPerformance improvement
ciCI/CD config changes
styleFormatting — no logic change

The scope is the service or module: coupon-api, reward-store, kafka.

feat(coupon-api): add bulk redeem endpoint

fix(reward-store): prevent double-credit on retry

chore(deps): bump gin to v1.9.1

refactor(coupon-api): extract redemption logic to service layer

feat(coupon-api)!: rename RewardStore to RewardRepository

BREAKING CHANGE: RewardStore interface removed; use RewardRepository

Key Takeaways