Gestion des Branches Git
Table des matières
- Concepts des branches
- Créer et supprimer des branches
- Naviguer entre branches
- Fusionner des branches
- Stratégies de branching
- Bonnes pratiques
1 - Concepts des branches
Qu'est-ce qu'une branche ?
Une branche est simplement un pointeur vers un commit.
A---B---C feature
/
D---E---F---G main
↑
HEAD
Pourquoi utiliser des branches ?
| Usage | Exemple |
|---|---|
| Nouvelle fonctionnalité | feature/login |
| Correction de bug | fix/button-click |
| Expérimentation | experiment/new-ui |
| Versions | release/v2.0 |
La branche main/master
- Branche principale du projet
- Contient le code de production
- Doit toujours être stable
🔝 Retour à la table des matières
2 - Créer et supprimer des branches
Créer une branche
# Créer une branche (sans y aller)
git branch feature/login
# Créer et aller sur la branche
git checkout -b feature/login
# Syntaxe moderne
git switch -c feature/login
Créer depuis un commit spécifique
git branch feature/old-version abc1234
Lister les branches
# Branches locales
git branch
# Branches avec dernier commit
git branch -v
# Toutes les branches (locales + remote)
git branch -a
# Branches mergées
git branch --merged
# Branches non mergées
git branch --no-merged
Supprimer une branche
# Supprimer (si mergée)
git branch -d feature/login
# Forcer la suppression
git branch -D feature/login
# Supprimer sur le remote
git push origin --delete feature/login
Renommer une branche
# Renommer la branche actuelle
git branch -m nouveau-nom
# Renommer une autre branche
git branch -m ancien-nom nouveau-nom
🔝 Retour à la table des matières
3 - Naviguer entre branches
Changer de branche
# Ancienne syntaxe
git checkout feature/login
# Nouvelle syntaxe (Git 2.23+)
git switch feature/login
Revenir à la branche précédente
git checkout -
git switch -
Vérifier la branche actuelle
git branch --show-current
git status # Affiche aussi la branche
Attention aux modifications non commitées
# Si vous avez des modifications non commitées
git checkout feature/login
# error: Your local changes would be overwritten
# Solutions :
# 1. Commiter
git commit -am "wip"
# 2. Stasher
git stash
git checkout feature/login
git stash pop # Quand vous revenez
🔝 Retour à la table des matières
4 - Fusionner des branches
Merge de base
# Aller sur la branche destination
git checkout main
# Fusionner la feature branch
git merge feature/login
Types de merge
Fast-forward merge
Quand main n'a pas changé depuis la création de la branche :
Avant:
D---E main
\
A---B feature
Après (fast-forward):
D---E---A---B main, feature
git merge feature # Fast-forward automatique
Merge commit
Quand main a évolué :
Avant:
A---B feature
/
D---E---F main
Après:
A---B
/ \
D---E---F---M main
git merge feature # Crée un merge commit
Forcer un merge commit
git merge --no-ff feature/login
Avantage : L'historique montre clairement où la feature a été intégrée.
Annuler un merge
# Pendant le merge (conflits)
git merge --abort
# Après le merge
git reset --hard HEAD~1
🔝 Retour à la table des matières
5 - Stratégies de branching
Git Flow
Structure complète pour les grands projets :
main ─────────────●─────────────────●───────
↑ ↑
release ─────────●───────● ●───────
↑ ↑ ↑
develop ────●────●───────●─────────●───────
↑ ↑ ↑ ↑
feature ────●────● │ │
│ │
hotfix ──────────────────●─────────┘
| Branche | Usage |
|---|---|
main | Production |
develop | Intégration |
feature/* | Nouvelles fonctionnalités |
release/* | Préparation des releases |
hotfix/* | Corrections urgentes |
GitHub Flow
Plus simple, idéal pour le déploiement continu :
main ────●────●────●────●────●────
↑ ↑ ↑
feature ─● │ │
│ │
feature ──────● │
│
feature ───────────●
- Créer une branche depuis
main - Faire des commits
- Ouvrir une Pull Request
- Review et discussion
- Merger dans
main - Déployer
Trunk-Based Development
Tout le monde travaille sur main avec des feature flags :
main ────●────●────●────●────●────
↑ ↑ ↑ ↑ ↑
dev1 dev2 dev1 dev3 dev2
Idéal pour : Équipes expérimentées, déploiement très fréquent.
🔝 Retour à la table des matières
6 - Bonnes pratiques
Nommage des branches
# Format recommandé
type/description-courte
# Exemples
feature/user-authentication
fix/login-button
hotfix/security-patch
release/v2.1.0
✅ À faire
| Pratique | Raison |
|---|---|
| Branches courtes | Moins de conflits |
| Un objectif par branche | Facilite les reviews |
| Merge régulièrement main | Rester à jour |
| Supprimer après merge | Garder propre |
❌ À éviter
| Pratique | Risque |
|---|---|
| Branches de longue durée | Conflits difficiles |
Noms vagues (fix, test) | Confusion |
| Travailler directement sur main | Code instable |
Résumé des commandes
| Commande | Description |
|---|---|
git branch | Lister les branches |
git branch nom | Créer une branche |
git checkout -b nom | Créer et aller sur la branche |
git switch nom | Changer de branche |
git merge nom | Fusionner une branche |
git branch -d nom | Supprimer une branche |