Branches — Travailler en parallèle sans risque
Module 02 60 min
Objectifs de la section
- Comprendre ce qu'est une branche et pourquoi elle est fondamentale
- Créer, changer, renommer et supprimer des branches
- Comprendre la différence entre
HEADet une branche - Connaître les conventions de nommage des branches
Qu'est-ce qu'une branche ?
Une branche est simplement un pointeur léger et déplaçable vers un commit. Quand vous créez une nouvelle branche, Git crée juste un nouveau pointeur — il ne copie rien.
Quand vous créez une nouvelle branche et faites un commit :
Pourquoi utiliser des branches ?
| Sans branches | Avec branches |
|---|---|
| Travailler directement sur main | Isoler chaque fonctionnalité/correction |
| Les changements cassants affectent tout le monde | Les erreurs sont isolées |
| Impossible de travailler en parallèle | N développeurs travaillent simultanément |
| Pas moyen d'« essayer quelque chose » | Expérimenter librement, supprimer si ça échoue |
| Pas de revues de code | PRs par branche |
Les branches sont gratuites
Créer une branche dans Git est presque instantané et a presque zéro coût en termes d'espace disque. Utilisez-les généreusement.
Gérer les branches
Créer une branche
# Créer une branche (sans changer de branche)
git branch feature/login
# Créer ET changer de branche (syntaxe moderne)
git switch -c feature/login
# Créer ET changer (ancienne syntaxe, encore très utilisée)
git checkout -b feature/login
# Créer une branche depuis un commit ou une branche spécifique
git switch -c hotfix/bug-42 main
git switch -c experiment v1.0 # Depuis un tag
Changer de branche
# Syntaxe moderne (recommandée)
git switch main
git switch feature/login
# Ancienne syntaxe (fonctionne toujours)
git checkout main
git checkout feature/login
# Revenir à la dernière branche
git switch -
git checkout - # Équivalent à cd -
Voir les branches
# Lister les branches locales
git branch
# Lister avec le dernier commit
git branch -v
# Lister les branches locales + distantes
git branch -a
# Lister uniquement les branches distantes
git branch -r
# Lister les branches fusionnées (sans risque à supprimer)
git branch --merged
# Lister les branches non fusionnées
git branch --no-merged
Renommer une branche
# Renommer la branche actuelle
git branch -m nouveau-nom
# Renommer une branche spécifique
git branch -m ancien-nom nouveau-nom
# Renommer master → main (pour les dépôts initialisés avec "master")
git branch -m master main
Supprimer une branche
# Supprimer une branche fusionnée
git branch -d feature/login
# Forcer la suppression (même si non fusionnée — ATTENTION !)
git branch -D feature/abandonnee
# Supprimer une branche distante
git push origin --delete feature/login
Conventions de nommage des branches
Un nommage clair et cohérent est une pratique professionnelle :
| Préfixe | Cas d'utilisation | Exemples |
|---|---|---|
feature/ | Nouvelle fonctionnalité | feature/connexion-utilisateur, feature/paiement |
fix/ ou bugfix/ | Correction de bug | fix/validation-email, bugfix/crash-ios |
hotfix/ | Correction urgente en production | hotfix/vulnerabilite-securite |
release/ | Préparation de version | release/v1.2.0 |
chore/ | Maintenance | chore/mise-a-jour-dependances |
refactor/ | Refactoring du code | refactor/module-auth |
docs/ | Documentation | docs/guide-api |
test/ | Ajout de tests | test/tests-unitaires-login |
# Bonnes pratiques de nommage
✅ feature/authentification-utilisateur
✅ fix/entetes-cors-manquants
✅ hotfix/injection-sql-v2.1
✅ release/v2.0.0
❌ fix # Trop vague
❌ MA_FONCTIONNALITE # Pas de majuscules ou underscores
❌ feature/ajout-du-nouveau-formulaire-de-connexion-admin # Trop long
❌ fix-bug # Sans préfixe
Visualiser les branches
Comprendre HEAD en détail
HEAD est un fichier spécial dans .git/HEAD qui indique à Git où vous êtes actuellement :
# Voir le contenu de HEAD
cat .git/HEAD
# En état normal : ref: refs/heads/main
# En état détaché : abc1234def5678...
# Voir ce vers quoi HEAD pointe
git symbolic-ref HEAD # refs/heads/main
git rev-parse HEAD # Hash complet du commit
État HEAD détaché
Le « HEAD détaché » se produit quand HEAD pointe directement vers un commit au lieu d'une branche :
# Cela cause un HEAD détaché
git checkout abc1234
# Avertissement : Vous êtes dans l'état 'HEAD détaché'.
# Vous pouvez regarder, faire des changements expérimentaux et les commiter,
# et vous pouvez annuler tous les commits que vous faites dans cet état
# sans impacter aucune branche en revenant à une branche.
# Retourner à une branche
git switch main
git checkout main
# Sauvegarder votre travail depuis HEAD détaché
git switch -c mon-experience # Créer une branche depuis l'état actuel
Résumé des commandes clés
| Commande | Description |
|---|---|
git branch | Lister les branches locales |
git branch -a | Lister toutes les branches |
git branch <nom> | Créer une branche |
git switch -c <nom> | Créer et changer |
git switch <nom> | Changer de branche |
git switch - | Revenir à la dernière branche |
git branch -d <nom> | Supprimer une branche fusionnée |
git branch -D <nom> | Forcer la suppression |
git branch -m <nom> | Renommer la branche actuelle |