Retour au cours

infra / git-github

Branches

Leçon 41 exercice

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 switch et git 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éfixeUsageExemple
feature/Nouvelle fonctionnalitéfeature/user-auth
fix/Correction d'un bug non urgentfix/cart-total-rounding
hotfix/Urgence à corriger immédiatement en productionhotfix/payment-timeout
chore/Maintenance sans impact fonctionnelchore/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

bash
# 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
bash
# 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
bash
# 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
bash
# Convention de nommage courante en équipe
# feature/nom-court-descriptif
# fix/bug-decrit-brievement
# hotfix/urgence-production
# chore/tache-de-maintenance

Résumé

  • git switch (moderne) et git checkout (historique) changent de branche.
  • -b/-c créent ET basculent sur la nouvelle branche en une seule commande.
  • git branch -d refuse de supprimer une branche non fusionnée ; -D force.
  • git fetch --prune nettoie les branches distantes supprimées côté serveur.

Exercices pratiques

1 disponible
1

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

Résoudre l’exercice →