Le workflow de branching définit comment votre équipe organise ses branches, intègre le code et livre en production. Il n'existe pas de workflow universel, le bon choix dépend de la taille de l'équipe, du rythme de livraison et du type de projet. Ce guide compare les cinq principaux workflows pour vous aider à décider.
Prérequis : Les branches en bref et Merge et conflits.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comparer les 5 workflows Git : centralisé, feature branch, Gitflow, forking, trunk-based
- Identifier forces et faiblesses de chaque stratégie de branchement
- Choisir le workflow adapté à votre équipe, release cadence et CI/CD
- Éviter les antipatterns courants (branches trop longues, merges massifs)
1. Centralized Workflow
Section intitulée « 1. Centralized Workflow »Le plus simple : tout le monde travaille sur main.
main : ─── C1 ── C2 ── C3 ── C4 ── C5 ─── ↑ ↑ ↑ ↑ ↑ Dev A Dev B Dev A Dev C Dev B- Pas de branches (ou très rarement)
- Chaque dev fait
pull --rebasepuispush - Adapté aux équipes de 1-3 personnes sur un projet simple
2. Feature Branch Workflow
Section intitulée « 2. Feature Branch Workflow »Chaque fonctionnalité est développée sur sa propre branche, puis intégrée via une PR.
main : ─── C1 ────── C2 ─── M1 ─── M2 ─── │ ↑ ↑feature/a: └── C3 ┘ │feature/b: └── C4 ── C5 ┘Fonctionnement
Section intitulée « Fonctionnement »-
Créer une branche depuis
main:git switch -c feature/user-auth -
Travailler et commiter
-
Pousser et ouvrir une PR
-
Review, approbation, merge
-
Supprimer la branche
Forces et faiblesses
Section intitulée « Forces et faiblesses »| Force | Faiblesse |
|---|---|
| Isolation du travail | Branches longues = merge complexe |
| Revue de code naturelle | Pas de convention sur le nommage des branches |
| Simple à comprendre | Pas de gestion des releases |
C'est le workflow le plus répandu. Il convient à la majorité des projets.
3. Gitflow (Vincent Driessen, 2010)
Section intitulée « 3. Gitflow (Vincent Driessen, 2010) »Un workflow structuré avec des branches à rôle fixe.
main : ─── v1.0 ──────────────── v1.1 ── v2.0 ─── │ ↑ ↑hotfix : │ ─ fix ──┘ │ │ │release : │ ─── RC1 ── RC2 ┘ │ ↑develop : ─── D1 ── D2 ── D3 ── D4 ── D5 ── D6 ─── │ ↑ ↑feature : └── F1 ── F2 │ └── F3 ── F4 ┘Les branches
Section intitulée « Les branches »| Branche | Durée de vie | Rôle |
|---|---|---|
main | Permanente | Code en production (tags de version) |
develop | Permanente | Intégration des features |
feature/* | Temporaire | Développement d'une fonctionnalité |
release/* | Temporaire | Préparation d'une version (stabilisation) |
hotfix/* | Temporaire | Correction urgente en production |
Cycle de release
Section intitulée « Cycle de release »- Les features sont mergées dans
develop - Quand
developest stable, on créerelease/2.0 - Corrections de bugs sur la branche release
- La release est mergée dans
mainetdevelop mainest taguée (v2.0)
Forces et faiblesses
Section intitulée « Forces et faiblesses »| Force | Faiblesse |
|---|---|
| Gestion des releases structurée | Complexe (5 types de branches) |
| Hotfixes clairs | Merge fréquents entre branches |
| Adapté au versioning strict | Cycle de release lent |
4. GitHub Flow
Section intitulée « 4. GitHub Flow »Une version simplifiée du Feature Branch Workflow, pensée pour le déploiement continu.
main : ─── C1 ── C2 ── M1 ── M2 ── M3 ── (deploy) │ ↑ ↑ ↑feature : └── C3 ┘ │ │fix : └─ C4 ┘ │feature : └── C5 ┘mainest toujours déployable- Créez une branche pour chaque changement
- Ouvrez une PR tôt (draft si besoin)
- Après review + CI verte, mergez dans
main - Déployez immédiatement après le merge
Forces et faiblesses
Section intitulée « Forces et faiblesses »| Force | Faiblesse |
|---|---|
| Très simple (2 types de branches) | Pas de gestion de releases |
| Déploiement continu natif | Nécessite une CI/CD robuste |
| PRs pour tout | main doit toujours être stable |
5. Trunk-Based Development
Section intitulée « 5. Trunk-Based Development »Le mouvement le plus radical : tout le monde pousse sur main
(le « trunk »), avec des branches très courtes (< 1 jour).
main : ─── C1 ── C2 ── C3 ── C4 ── C5 ── C6 ── (deploy) ↑ ↑ ↑short-lived: └─ F1 ┘ │ │ └── F2 ┘ │ └── F3 ┘Principes
Section intitulée « Principes »- Les branches vivent moins d'un jour (idéalement quelques heures)
- Les features incomplètes sont cachées derrière des feature flags
- L'intégration continue est essentielle (tests automatisés obligatoires)
- Le déploiement est fréquent (plusieurs fois par jour)
Forces et faiblesses
Section intitulée « Forces et faiblesses »| Force | Faiblesse |
|---|---|
| Intégration continue réelle | Discipline rigoureuse requise |
| Pas de branches longues | Feature flags à gérer |
| Feedback rapide | Nécessite une excellente CI/CD |
| Réduit les conflits de merge | Difficile pour les juniors |
6. GitLab Flow
Section intitulée « 6. GitLab Flow »Un compromis entre GitHub Flow et Gitflow, avec des branches d'environnement.
main : ─── C1 ── C2 ── M1 ── M2 ─── │ │pre-production: M1' M2' │ │production : M1'' M2''Principe
Section intitulée « Principe »mainest la branche de développement- Des branches d'environnement (
pre-production,production) reçoivent les merges demain - Le merge vers
productiondéclenche le déploiement - Variante : branches de release (
1-stable,2-stable) pour le support multi-versions
Comparatif global
Section intitulée « Comparatif global »| Critère | Centralized | Feature Branch | Gitflow | GitHub Flow | Trunk-Based | GitLab Flow |
|---|---|---|---|---|---|---|
| Complexité | Faible | Faible | Élevée | Faible | Moyenne | Moyenne |
| Revue de code | Non | Oui (PR) | Oui | Oui (PR) | Optionnelle | Oui (MR) |
| Rythme de release | Variable | Variable | Planifié | Continu | Continu | Variable |
| Branches longues | Non | Possible | Oui | Non | Non | Oui (env.) |
| CI/CD requis | Non | Recommandé | Recommandé | Oui | Obligatoire | Oui |
| Taille d'équipe | 1-3 | 2-20 | 5-50 | 2-30 | 5-100+ | 5-50 |
Comment choisir ?
Section intitulée « Comment choisir ? »| Votre situation | Workflow recommandé |
|---|---|
| Seul ou 2-3 développeurs | Centralized ou Feature Branch |
| Équipe avec CI/CD mature | GitHub Flow ou Trunk-Based |
| Releases planifiées (SaaS, mobile) | Gitflow |
| Déploiement continu (web) | GitHub Flow ou Trunk-Based |
| Multi-environnements (staging, prod) | GitLab Flow |
| Très grande équipe | Trunk-Based (avec feature flags) |
À retenir
Section intitulée « À retenir »- Feature Branch : une branche par feature + PR, le plus courant
- Gitflow : branches structurées (main/develop/feature/release/hotfix) pour les releases planifiées
- GitHub Flow : simple, tout passe par PR, déploiement continu
- Trunk-Based : branches très courtes, feature flags, le plus performant selon DORA
- GitLab Flow : branches d'environnement, compromis entre GitHub Flow et Gitflow
- Il n'y a pas de workflow parfait, choisissez selon votre contexte