infra / git-github
Branches
Explication
Ce que vous allez apprendre
- Comprendre pourquoi une branche Git est légère : une simple étiquette vers un commit
- Créer, basculer et supprimer une branche avec
git switchetgit branch - Adopter une convention de nommage cohérente (
feature/,fix/,hotfix/) - Nettoyer les branches déjà fusionnées et les références distantes obsolètes
- Comprendre pourquoi Git refuse par défaut de supprimer une branche non fusionnée
Dans quel contexte ?
Une équipe travaille sur le dépôt boutique-api : une développeuse ajoute l'authentification par email sur une branche feature/user-auth, pendant qu'un collègue corrige en urgence un bug de paiement sur hotfix/payment-timeout, sans que ces deux travaux ne se marchent dessus. Chacun avance sur sa propre ligne de développement, isolée du reste, jusqu'à ce qu'elle soit prête à être réunie au projet principal.
Le problème du travail en parallèle
D'abord, imagine devoir développer une nouvelle fonctionnalité tout en gardant la version actuelle du code parfaitement stable et déployable en cas de besoin urgent.
Ce que ça obligerait à faire sans outil dédié
Sans outil dédié, cela obligerait à dupliquer des dossiers ou à travailler dans une tension permanente entre "je casse tout" et "je n'ose rien changer".
La solution : des lignes de développement séparées
Les branches résolvent ce problème : elles permettent de faire évoluer une ligne de développement en parallèle du reste, sans jamais affecter les autres branches, jusqu'à ce que tu décides explicitement de les réunir avec un merge, vu à la prochaine leçon.
Ce qu'est vraiment une branche, techniquement
Une fois ce besoin compris, il faut savoir qu'une branche Git n'est rien d'autre qu'une étiquette mobile qui pointe vers un commit précis.
Pourquoi cette légèreté change la façon de travailler
C'est ce qui rend la création d'une branche quasi instantanée et sans coût : créer dix branches ne duplique rien de lourd. Cette légèreté encourage une pratique saine : créer une nouvelle branche pour chaque fonctionnalité ou chaque correctif, même petit.
Une convention de nommage qui a du sens
Nommer ses branches selon un schéma cohérent, feature/..., fix/..., hotfix/..., n'est pas qu'une question d'esthétique.
Ce que cette convention apporte à l'équipe
Cela permet à toute l'équipe de comprendre en un coup d'œil, dans la liste des branches ou des Pull Requests, la nature et l'urgence de chaque travail en cours.
| Préfixe | Usage | Exemple |
|---|---|---|
feature/ | Nouvelle fonctionnalité | feature/user-auth |
fix/ | Correction d'un bug non urgent | fix/cart-total-rounding |
hotfix/ | Urgence à corriger immédiatement en production | hotfix/payment-timeout |
chore/ | Maintenance sans impact fonctionnel | chore/update-dependencies |
Nettoyer derrière soi
Une fois une fonctionnalité fusionnée, sa branche n'a plus de raison d'exister : la conserver indéfiniment encombre la liste des branches et peut créer de la confusion.
Une sécurité intégrée à connaître
Git refuse par sécurité de supprimer une branche non encore fusionnée sans une confirmation explicite, avec -D au lieu de -d.
Piège fréquent
Utiliser git branch -D par réflexe pour éviter le message d'erreur de -d peut supprimer définitivement une branche contenant du travail jamais fusionné nulle part. Ne remplace -d par -D que si tu es certain que le travail de cette branche est bien récupéré ailleurs (fusionné, ou cherry-ické).
Maintenant que tu sais créer des lignes de développement séparées, la leçon suivante s'attaque à leur réunion : le merge.
Commandes & code
Branches
# Lister, créer, changer de branche
git branch # liste les branches locales
git branch -a # + les branches distantes (remote-tracking)
git branch feature/user-auth
git checkout feature/user-auth
git switch feature/user-auth # équivalent moderne de "checkout" pour changer de branche
# Créer ET basculer en une seule commande
git checkout -b feature/user-auth
git switch -c feature/user-auth# Travailler sur la branche
echo "export function login() {}" > auth.js
git add auth.js
git commit -m "Add login function skeleton"
# Pousser une nouvelle branche vers GitHub
git push -u origin feature/user-auth# Renommer, supprimer
git branch -m ancien-nom nouveau-nom # renomme une branche locale
git branch -d feature/user-auth # supprime SI déjà fusionnée (sécurisé)
git branch -D feature/user-auth # force la suppression (même non fusionnée)
git push origin --delete feature/user-auth # supprime la branche côté GitHub
# Nettoyer les références locales vers des branches distantes supprimées
git fetch --prune# Convention de nommage courante en équipe
# feature/nom-court-descriptif
# fix/bug-decrit-brievement
# hotfix/urgence-production
# chore/tache-de-maintenanceRésumé
git switch(moderne) etgit checkout(historique) changent de branche.-b/-ccréent ET basculent sur la nouvelle branche en une seule commande.git branch -drefuse de supprimer une branche non fusionnée ;-Dforce.git fetch --prunenettoie les branches distantes supprimées côté serveur.
Exercices pratiques
Mission : nettoyer une jungle de branches
Objectif : Décider quelles branches supprimer en toute sécurité et faire respecter la convention de nommage de l'équipe.
Contexte
Le dépôt boutique-api accumule des dizaines de branches : certaines fusionnées depuis des mois, d'autres contenant du travail jamais intégré nulle part, et des noms qui ne suivent aucune convention claire (test2, johntemp, fixbug).