Skip to content

Gitflow

1. Introduction

This guide describes the Release Management process in a project using the Gitflow workflow. It enables structured, stable, and predictable delivery of software versions.

2. Gitflow Branches

Branch Role
main Stable production-ready version
develop Integration of ongoing development
feature/* Isolated development of new features
release/* Final preparation before going to production
hotfix/* Urgent bug fixes for production

3. Release Process

3.1 Create the release Branch

When develop is stable and ready:

git checkout develop
git checkout -b release/1.0.0

3.2 Stabilization Phase

Perform on the release branch: - Minor bug fixes - QA/UAT testing - Version bump - Minor adjustments (docs, configs...)

3.3 Deliver to main

git checkout main
git merge release/1.0.0
git tag -a v1.0.0 -m "Release version 1.0.0"

3.4 Reintegrate into develop

git checkout develop
git merge release/1.0.0
git branch -d release/1.0.0

4. Hotfix Management

If a bug is found in production:

git checkout main
git checkout -b hotfix/1.0.1
# Fix the bug

git commit -am "Fix: critical bug"
git checkout main
git merge hotfix/1.0.1
git tag -a v1.0.1 -m "Hotfix 1.0.1"

git checkout develop
git merge hotfix/1.0.1
git branch -d hotfix/1.0.1

5. Roles and Responsibilities

Role Main Responsibilities
Developers Feature development, bug fixes
Release Manager Release planning and orchestration
QA / Testers Quality validation
DevOps / Ops Deployment to staging/production
Product Owner Functional approval

6. Best Practices

  • Do not develop new features on a release branch
  • Always merge release into main and develop
  • Use Git tags for published versions
  • Maintain a clear changelog
  • Use explicit branch naming (release/1.2.0, hotfix/1.2.1, etc.)

7. Release Tracker

Version Release Date Status Notes
v1.0.0 2024-06-01 Released Initial stable version
v1.0.1 2024-06-10 Hotfix Critical bug fix
v1.1.0 TBD In Progress New features planned

8. Diagram

gitGraph
   commit
   branch develop
   checkout develop
   commit id: "Feature A"
   branch featureA
   checkout featureA
   commit id: "Work on Feature A"
   checkout develop
   merge featureA
   commit id: "Prepare for release"
   branch release1.0.0
   checkout release1.0.0
   commit id: "Final fixes"
   checkout main
   merge release1.0.0 tag: "v1.0.0"
   checkout develop
   merge release1.0.0