
Une branche c'est juste un pointeur vers un commit. C'est tout.
Pas de copie de ton code, pas de dossier séparé, pas de magie. Juste un petit fichier qui dit "je pointe vers le commit abc123."
Quand tu crées une branche, Git crée ce pointeur. Quand tu changes de branche, Git déplace HEAD vers la nouvelle branche. Quand tu commit, le pointeur de la branche avance.
C'est tout le modèle.
Pourquoi les branches existent
Sans branches, t'aurais un historique linéaire. Chaque changement s'empilerait sur le précédent. Tu veux tester un truc expérimental ? Pas de bol, c'est maintenant dans ton code principal.
Les branches te permettent de diverger. Tu peux bosser sur une feature, tout casser, expérimenter, et ton code principal reste intact.
Deux timelines parallèles. Tu choisis laquelle suivre.
Créer des branches
# Créer une branche
git branch feature-login
# Créer et basculer dessus
git checkout -b feature-login
# Ou avec les versions récentes de Git
git switch -c feature-login
TIP
Préfère git switch -c à git checkout -b. C'est plus clair et conçu spécifiquement pour les branches.
La branche est créée depuis là où HEAD pointe. En général, le dernier commit de ta branche actuelle.
Changer de branche
# Ancienne méthode
git checkout main
# Nouvelle méthode
git switch main
Quand tu changes de branche, Git met à jour ton working directory pour correspondre au dernier commit de cette branche. Tes fichiers changent littéralement sur le disque.
WARNING
Si tu as des changements non commités, Git peut refuser de changer ou peut emporter ces changements avec toi. Commit, stash, ou abandonne-les d'abord.
Lister les branches
# Branches locales
git branch
# Toutes les branches (y compris remote)
git branch -a
# Avec info du dernier commit
git branch -v
La branche actuelle a un * à côté.
Supprimer des branches
# Supprimer une branche mergée
git branch -d feature-login
# Forcer la suppression (même si pas mergée)
git branch -D feature-login
NOTE
Tu peux pas supprimer la branche sur laquelle tu es. Change de branche d'abord.
🔍 Que se passe-t-il quand tu supprimes une branche ?
Git supprime juste le pointeur. Les commits sont toujours là, au moins temporairement. Le garbage collector de Git finira par nettoyer les commits vers lesquels rien ne pointe, mais t'as un peu de temps pour récupérer si tu t'es trompé.
Pour récupérer une branche supprimée :
git reflog
# Trouve le hash du commit
git branch recovered-branch abc123
Les branches distantes
Tes branches locales et les branches distantes sont des choses séparées. Quand tu clones un repo, tu obtiens des copies locales des branches distantes.
# Voir les branches distantes
git branch -r
# Récupérer les mises à jour depuis le remote
git fetch origin
# Pousser une branche locale vers le remote
git push origin feature-login
# Pousser et définir l'upstream (pour pouvoir juste faire git push après)
git push -u origin feature-login
Les branches distantes sont nommées origin/main, origin/feature-login, etc. Tu peux pas commit dessus directement, tu commit localement et tu push.
Les branches de suivi
Une branche de suivi (tracking branch) est une branche locale connectée à une branche distante.
# Créer une branche locale qui suit une branche distante
git checkout -b feature-login origin/feature-login
# Ou plus court
git checkout feature-login
# Git suit automatiquement si une branche distante avec le même nom existe
# Voir les infos de suivi
git branch -vv
Quand le suivi est configuré, git pull et git push savent où aller sans que tu précises.
Conventions de nommage
Pas de règles strictes, mais des patterns courants :
feature/login-page— nouvelle featurebugfix/header-alignment— correction de bughotfix/security-patch— fix urgent en prodrelease/v2.1.0— préparation de release
Certaines équipes utilisent des préfixes, d'autres non. Choisis une convention et tiens-toi y.
TIP
Garde les noms de branches en minuscules avec des tirets. Évite les espaces, caractères spéciaux, et noms trop longs.
Erreurs courantes
"J'ai commit sur la mauvaise branche"
# Annuler le commit mais garder les changements
git reset --soft HEAD~1
# Changer vers la bonne branche
git switch correct-branch
# Commit là-bas
git commit -m "Ton message"
"Je dois changer de branche mais j'ai des changements non commités"
# Stash tes changements
git stash
# Change de branche
git switch other-branch
# Fais ton truc, puis reviens
git switch original-branch
# Récupère tes changements
git stash pop
"Ma branche est en retard sur main"
# Option 1 : Merge main dans ta branche
git switch feature-branch
git merge main
# Option 2 : Rebase (historique plus propre)
git switch feature-branch
git rebase main
On couvrira merge vs rebase en détail dans le prochain article.
Cheat sheet
| Commande | Ce qu'elle fait |
|---|---|
git branch | Lister les branches locales |
git branch name | Créer une branche |
git switch name | Changer de branche |
git switch -c name | Créer et changer |
git branch -d name | Supprimer branche mergée |
git branch -D name | Forcer la suppression |
git push -u origin name | Pousser et suivre |
git fetch | Mettre à jour les branches distantes |
Ce qu'il faut retenir
"Branch early, branch often."
Les branches sont pas chères. En créer une prend des millisecondes et quasi pas d'espace disque. Te prends pas la tête, crée une branche dès que tu fais quelque chose qui pourrait pas marcher.
Prochain article : merge, rebase, et squash. Ce qui se passe quand les branches doivent se retrouver.
C'est la partie 2 de ma série "Git & GitHub en 10 articles".
Des questions ? Contacte-moi sur LinkedIn ou découvre plus sur mon blog.