Aller au contenu
Développement medium

Workflows Git : Gitflow, Feature Branch, Trunk-Based

14 min de lecture

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 six workflows les plus répandus pour vous aider à décider.

Prérequis : Les branches en bref et Merge et conflits.

  • Comparer les 6 workflows Git : centralisé, feature branch, Gitflow, GitHub Flow, trunk-based, GitLab Flow
  • 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)

Le plus simple : tout le monde travaille sur main. Le schéma ci-dessous montre une seule ligne d'historique, alimentée par plusieurs développeurs à tour de rôle. C'est le fonctionnement hérité de Subversion, et sa limite apparaît dès qu'un travail dure plus d'une journée : le code inachevé se retrouve sur la branche que tout le monde utilise, sans possibilité de l'isoler.

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 --rebase puis push
  • Adapté aux équipes de 1-3 personnes sur un projet simple

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 ┘

Le cycle tient en cinq gestes qui se répètent pour chaque fonctionnalité. Les deux étapes qui font la différence en pratique sont la première et la dernière : partir d'un main à jour évite de traîner des conflits dès le départ, et supprimer la branche après le merge empêche l'accumulation de branches mortes que plus personne n'ose toucher.

  1. Créer une branche depuis main : git switch -c feature/user-auth

  2. Travailler et commiter

  3. Pousser et ouvrir une PR

  4. Review, approbation, merge

  5. Supprimer la branche

ForceFaiblesse
Isolation du travailBranches longues = merge complexe
Revue de code naturellePas de convention sur le nommage des branches
Simple à comprendrePas de gestion des releases

C'est le workflow le plus répandu. Il convient à la majorité des projets.

Un workflow structuré avec des branches à rôle fixe, décrit par Vincent Driessen dans un billet publié le 5 janvier 2010. Lisez le schéma de bas en haut : le travail naît sur feature, remonte dans develop, se stabilise sur une branche release, et n'atteint main qu'au moment de la mise en production. Les hotfix sont le seul chemin qui court-circuite ce parcours.

main : ─── v1.0 ──────────────── v1.1 ── v2.0 ───
│ ↑ ↑
hotfix : │ ─ fix ──┘ │
│ │
release : │ ─── RC1 ── RC2 ┘
│ ↑
develop : ─── D1 ── D2 ── D3 ── D4 ── D5 ── D6 ───
│ ↑ ↑
feature : └── F1 ── F2 │
└── F3 ── F4 ┘

La colonne « Durée de vie » est la clé de lecture : deux branches sont permanentes et ne sont jamais supprimées, les trois autres sont créées puis détruites à chaque cycle. La confusion la plus courante chez qui découvre Gitflow concerne main et develop : le code qui tourne chez vos utilisateurs est sur main, alors que develop contient l'intégration en cours, qui n'a jamais été livrée.

BrancheDurée de vieRôle
mainPermanenteCode en production (tags de version)
developPermanenteIntégration des features
feature/*TemporaireDéveloppement d'une fonctionnalité
release/*TemporairePréparation d'une version (stabilisation)
hotfix/*TemporaireCorrection urgente en production

L'étape 4 est celle qu'on rate le plus souvent : la branche de release doit être fusionnée dans les deux branches permanentes. Si vous oubliez develop, les corrections faites pendant la stabilisation disparaissent et reviendront comme des régressions à la version suivante. Le même raisonnement vaut pour un hotfix, qui part de main et doit lui aussi redescendre dans develop.

  1. Les features sont mergées dans develop
  2. Quand develop est stable, on crée release/2.0
  3. Corrections de bugs sur la branche release
  4. La release est mergée dans main et develop
  5. main est taguée (v2.0)

Le rapport bénéfice/coût de Gitflow dépend entièrement de votre rythme de livraison. Sa structure est un atout réel quand vous devez maintenir plusieurs versions en parallèle chez des clients différents. Elle devient un poids quand vous livrez tous les jours, parce que chaque déploiement demande de traverser trois branches au lieu d'une.

ForceFaiblesse
Gestion des releases structuréeComplexe (5 types de branches)
Hotfixes clairsMerge fréquents entre branches
Adapté au versioning strictCycle de release lent

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 ┘

Ces cinq règles ne se négocient pas indépendamment : elles ne tiennent que prises ensemble. La première est un engagement lourd, car « toujours déployable » signifie qu'un merge cassé bloque toute l'équipe. C'est ce qui rend la CI obligatoire plutôt que souhaitable dans ce modèle : sans tests automatisés fiables sur chaque PR, la règle 1 devient un vœu pieux.

  1. main est toujours déployable
  2. Créez une branche pour chaque changement
  3. Ouvrez une PR tôt (draft si besoin)
  4. Après review + CI verte, mergez dans main
  5. Déployez immédiatement après le merge

La colonne de droite décrit un seul et même compromis vu sous trois angles : GitHub Flow échange la gestion des versions contre la simplicité. Si votre produit est un site ou une API que vous contrôlez de bout en bout, vous ne perdez rien. Si vous distribuez un logiciel que des clients installent chez eux et gardent plusieurs mois, l'absence de branche de version devient bloquante.

ForceFaiblesse
Très simple (2 types de branches)Pas de gestion de releases
Déploiement continu natifNécessite une CI/CD robuste
PRs pour toutmain doit toujours être stable

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 ┘

Le premier principe entraîne mécaniquement le deuxième. Si une branche ne vit que quelques heures, une fonctionnalité qui demande deux semaines doit être intégrée inachevée, donc rendue invisible en production par un feature flag, c'est-à-dire une condition qui active ou désactive le code sans nouveau déploiement. C'est le prix d'entrée du trunk-based, et la raison pour laquelle il ne s'improvise pas.

  • 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)

Les faiblesses listées ici ne sont pas techniques mais organisationnelles. Aucune ne se corrige avec un outil : elles demandent des tests dans lesquels l'équipe a confiance et une revue de code rapide. La dernière ligne mérite attention si vous encadrez des débutants, car pousser plusieurs fois par jour sur la branche de production suppose de savoir évaluer seul le risque d'un changement.

ForceFaiblesse
Intégration continue réelleDiscipline rigoureuse requise
Pas de branches longuesFeature flags à gérer
Feedback rapideNécessite une excellente CI/CD
Réduit les conflits de mergeDifficile pour les juniors

Un compromis entre GitHub Flow et Gitflow, avec des branches d'environnement.

main : ─── C1 ── C2 ── M1 ── M2 ───
│ │
pre-production: M1' M2'
│ │
production : M1'' M2''

L'idée centrale est de faire correspondre une branche à un environnement déployé, et de n'avancer que dans un seul sens : de main vers la pré-production, puis vers la production. Un commit ne peut donc pas atteindre la production sans être passé par les environnements précédents, ce qui donne une garantie que les workflows par tags n'offrent pas. La contrepartie est le maintien de plusieurs branches longues, avec le risque de dérive entre elles.

  • main est la branche de développement
  • Des branches d'environnement (pre-production, production) reçoivent les merges de main
  • Le merge vers production déclenche le déploiement
  • Variante : branches de release (1-stable, 2-stable) pour le support multi-versions

Deux lignes de ce tableau valent plus que les autres pour un choix rapide. La ligne CI/CD requis est éliminatoire : si vous n'avez pas de tests automatisés, les colonnes GitHub Flow et Trunk-Based ne sont pas des options, quel que soit votre attrait pour elles. La ligne branches longues annonce votre coût de merge futur, car c'est la durée de vie d'une branche, pas le nombre de développeurs, qui produit les conflits difficiles.

CritèreCentralizedFeature BranchGitflowGitHub FlowTrunk-BasedGitLab Flow
ComplexitéFaibleFaibleÉlevéeFaibleMoyenneMoyenne
Revue de codeNonOui (PR)OuiOui (PR)OptionnelleOui (MR)
Rythme de releaseVariableVariablePlanifiéContinuContinuVariable
Branches longuesNonPossibleOuiNonNonOui (env.)
CI/CD requisNonRecommandéRecommandéOuiObligatoireOui
Taille d'équipe1-32-205-502-305-100+5-50

Cherchez la ligne qui décrit votre contexte, pas celle qui décrit votre ambition. Un workflow se change plus facilement qu'une culture d'équipe : adopter le trunk-based sans tests automatisés produit une branche main cassée en permanence, ce qui coûte plus cher que le workflow qu'on cherchait à quitter. La progression naturelle va du feature branch vers GitHub Flow, puis vers le trunk-based à mesure que la CI/CD gagne en fiabilité.

Votre situationWorkflow recommandé
Seul ou 2-3 développeursCentralized ou Feature Branch
Équipe avec CI/CD matureGitHub 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 équipeTrunk-Based (avec feature flags)
  • 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

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn