Retour au blog

Comprendre les branches

Une branche c'est juste un pointeur vers un commit. Pas de copie de ton code, pas de dossier séparé, pas de magie. Voici comment les branches fonctionnent vraiment.

24 mars 202610 min de lecture
GitBranchesVersion ControlCommand Line
Comprendre les branches
Comprendre les branches - Une branche est juste un pointeur vers un commit
Comprendre les branches - Une branche est juste un pointeur vers un commit

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 feature
  • bugfix/header-alignment — correction de bug
  • hotfix/security-patch — fix urgent en prod
  • release/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

CommandeCe qu'elle fait
git branchLister les branches locales
git branch nameCréer une branche
git switch nameChanger de branche
git switch -c nameCréer et changer
git branch -d nameSupprimer branche mergée
git branch -D nameForcer la suppression
git push -u origin namePousser et suivre
git fetchMettre à 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.