Comment choisir une stratégie de fusion¶
Quand utiliser ce guide¶
Utilise ce guide quand tu veux :
- Comprendre la différence entre fast-forward, squash et merge commit
- Choisir la stratégie adaptée à ton projet ou à ta PR
- Savoir quelles permissions sont requises pour chaque stratégie
Pré-requis¶
- Une pull request ouverte sur le dépôt
- Le niveau d'accès Developer minimum (pour fusionner une PR dont tu es l'auteur) ou Maintainer (pour fusionner les PRs des autres)
Les trois stratégies¶
Fast-forward (--ff-only)¶
Ce que ça fait : déplace simplement le pointeur de la branche cible vers le dernier commit de la branche source. Aucun commit de merge n'est créé. L'historique reste parfaitement linéaire.
Quand l'utiliser :
- Branches courtes avec peu de commits
- Tu veux un historique linéaire lisible avec git log
- La branche n'a pas divergé de main (pas de commits sur main pendant que tu travaillais)
Limitation : impossible si la branche cible a avancé depuis la création de la branche source — il faut d'abord rebaser.
Squash¶
Ce que ça fait : regroupe tous les commits de la branche en un seul commit sur la branche cible. L'historique de la branche est condensé.
Avant : main: A → B
feat: B → C → D → E (3 commits)
Après : main: A → B → F
(F = C+D+E fusionnés en un seul commit)
Quand l'utiliser :
- Branche avec de nombreux micro-commits de type fix typo, wip, encore un fix
- Tu veux que main ne contienne que des commits propres et signifiants
- La PR correspond à une seule unité logique de travail
Limitation : les commits individuels sont perdus pour main — difficile de retrouver quel commit précis a introduit un changement avec git bisect.
Merge commit (--no-ff)¶
Ce que ça fait : crée un commit de merge explicite qui unit les deux branches. L'historique conserve la trace de la branche et de quand elle a été intégrée.
Quand l'utiliser :
- Branches longues avec historique riche qu'on veut conserver
- Tu veux pouvoir git revert l'ensemble de la feature d'un seul coup (revert du commit M)
- Les conventions de l'équipe exigent un historique non-rebasé
Limitation : l'historique du projet devient un graphe orienté (DAG) moins lisible avec git log --oneline.
Tableau de comparaison¶
| Critère | Fast-forward | Squash | Merge commit |
|---|---|---|---|
| Historique linéaire | ✓ | ✓ | — |
| Conserve les commits individuels | ✓ | — | ✓ |
| Commit de merge visible | — | — | ✓ |
git revert d'une feature entière |
difficile | par commit | ✓ (revert M) |
git bisect précis |
✓ | difficile | ✓ |
| Idéal pour | petites branches propres | branches bruyantes | features longues |
Étapes pour fusionner dans gitrust¶
Sur la page de la PR (/{owner}/{repo}/pulls/{num}), fais défiler jusqu'à la section Fusion :
- Sélectionne la stratégie dans le menu déroulant (Merge commit, Squash, ou Fast-forward)
- Si fast-forward est choisi mais impossible (branche divergente), gitrust indique l'erreur — rebaser d'abord
- Clique Fusionner la pull request
- Confirme si demandé
Sortie attendue :
Variantes¶
Fusionner via l'API¶
curl -X POST \
-H "Authorization: Bearer gr_pat_xxxx" \
-H "Content-Type: application/json" \
-d '{"merge_method": "squash"}' \
https://gitrust.example.com/api/v1/repos/owner/repo/pulls/1/merge
Valeurs valides pour merge_method : merge, squash, rebase (fast-forward).
Stratégie par défaut de l'équipe¶
Conventionner une stratégie par dépôt réduit les décisions ad hoc. Les équipes optant pour trunk-based development préfèrent le squash. Les équipes avec des branches longues (GitFlow) préfèrent le merge commit.
Voir aussi¶
- Ouvrir une pull request : créer la PR avant de la fusionner
- Cycle de vie d'une pull request : comprendre les transitions d'états
- Modèle de collaboration : philosophie gitrust sur les petites PRs