git branch
Découvrez la commande git branch, son utilisation, et comment créer et supprimer des branches Git. Avec des exemples pratiques.
Ce que fait git branch
La commande git branch crée, liste, renomme et supprime des branches. C'est l'intégralité de son rôle — elle ne bascule pas votre arbre de travail vers une branche, et elle ne fusionne pas du travail. Ces tâches appartiennent à git checkout / git switch et git merge. Considérez git branch comme l'outil qui gère les étiquettes, tandis que les autres commandes vous permettent de vous déplacer entre elles et de les réunir.
Cette page explique ce qu'est réellement une branche, comment en créer et en lister, comment les renommer et les supprimer (localement et sur un dépôt distant), ainsi que les erreurs courantes qui piègent les développeurs.

Ce qu'est réellement une branche
Une branche dans Git n'est pas une copie de vos fichiers — c'est un pointeur léger et mobile vers un seul commit. Chaque commit pointe également vers son ou ses parents, de sorte que remonter un pointeur de branche à travers ses parents reconstitue l'historique complet de cette ligne de travail.
Comme une branche n'est qu'un fichier de 41 octets contenant un hash de commit, sa création est instantanée et ne coûte presque rien :
cat .git/refs/heads/main
# 9f1c2a7e8d... (the commit your branch currently points at)Un pointeur spécial appelé HEAD indique sur quelle branche vous vous trouvez actuellement. Lorsque vous effectuez un commit, le pointeur de la branche courante avance vers le nouveau commit et HEAD le suit. C'est pourquoi la gestion des branches est si peu coûteuse dans Git par rapport aux anciens systèmes de contrôle de version qui dupliquaient physiquement les fichiers.
Pourquoi utiliser des branches
Les branches vous offrent une ligne de développement isolée. Vous pouvez développer une fonctionnalité ou corriger un bug sur sa propre branche sans toucher à la branche stable main, puis la fusionner lorsqu'elle est prête. Raisons courantes :
- Développer deux fonctionnalités en parallèle sans que leurs modifications entrent en conflit.
- Maintenir
maintoujours prête à être déployée pendant que le code expérimental vit ailleurs. - Nettoyer l'historique avant de fusionner, afin que la branche partagée reste ordonnée.
- Ouvrir une pull request — la plupart des plateformes construisent les PRs autour des branches.

Options courantes
| Commande | Ce qu'elle fait |
|---|---|
git branch | Liste les branches locales (identique à git branch --list) ; la branche courante est marquée d'un *. |
git branch -v | Liste les branches avec le dernier hash de commit et le message de chacune. |
git branch <branch> | Crée une nouvelle branche appelée <branch> mais ne bascule pas vers elle. |
git branch <branch> <start-point> | Crée <branch> pointant vers un commit, un tag ou une branche spécifique. |
git branch -d <branch> | Supprime une branche uniquement si ses modifications sont déjà fusionnées. |
git branch -D <branch> | Force la suppression d'une branche même avec des modifications non fusionnées (-D = --delete --force). |
git branch -m <old> <new> | Renomme une branche (utilisez -M pour écraser un nom existant). |
git branch -a | Liste toutes les branches — locales et de suivi distant. |
git branch -r | Liste uniquement les branches de suivi distant. |
git branch --merged | Liste les branches déjà fusionnées dans la branche courante (suppression sans risque). |
git branch --no-merged | Liste les branches pas encore fusionnées dans la branche courante. |
Créer des branches
Les branches ne sont que des pointeurs vers des commits. Lorsque vous en créez une, Git ajoute un nouveau pointeur sur votre commit actuel — cela ne modifie pas l'historique.

Créer une branche au commit actuel :
git branch test_branchUn nouveau pointeur vers le commit actuel est créé ; rien d'autre ne bouge :

Créer une branche ne vous y bascule pas — HEAD pointe toujours vers l'ancienne branche. Pour commencer à travailler sur la nouvelle branche, basculez vers elle puis utilisez git add et git commit pour enregistrer votre travail :
git switch test_branch # modern; or: git checkout test_branchLa plupart du temps, vous voudrez créer et basculer en une seule étape :
git switch -c test_branch # create + switch (modern)
git checkout -b test_branch # create + switch (older syntax, identical effect)Vous pouvez également créer une branche depuis un point spécifique plutôt que depuis HEAD — un tag, une autre branche ou un hash de commit :
git branch hotfix v1.0 # branch starting at the v1.0 tag
git branch experiment 9f1c2a7 # branch starting at an old commitLister et inspecter les branches
Exécuter git branch sans argument affiche vos branches locales et marque la branche courante :
git branch
# feature-login
# * main
# test_branchAjoutez -v pour voir vers quel commit pointe chaque branche :
git branch -v
# feature-login 1a2b3c4 Add login form
# * main 9f1c2a7 Update README
# test_branch 9f1c2a7 Update READMEPour identifier les branches qu'il est sans risque de nettoyer, listez celles déjà fusionnées dans votre branche courante. Tout ce qui apparaît ici peut être supprimé avec -d :
git branch --merged
# feature-login
# * mainRenommer des branches
Utilisez -m (move) pour renommer. Pour renommer la branche sur laquelle vous vous trouvez, donnez simplement le nouveau nom :
git branch -m better-namePour renommer une autre branche, donnez l'ancien et le nouveau nom :
git branch -m old-name new-nameSi une branche portant le nom cible existe déjà, -m refuse de l'écraser ; utilisez -M pour forcer le renommage. Notez que renommer une branche existant sur un dépôt distant ne la renomme pas là-bas — vous devez pousser le nouveau nom et supprimer l'ancien.
Supprimer des branches
Après qu'une branche a été fusionnée dans main, supprimez le pointeur local pour garder votre liste de branches ordonnée :
git branch -d test_branch
# Deleted branch test_branch (was 9f1c2a7).L'option -d est une protection : elle refuse de supprimer une branche dont les commits ne sont pas encore fusionnés dans la branche courante, afin que vous ne perdiez pas votre travail :
git branch -d test_branch
# error: The branch 'test_branch' is not fully merged.
# If you are sure you want to delete it, run 'git branch -D test_branch'.Si vous êtes certain de vouloir supprimer la branche (et ses commits non fusionnés), utilisez le -D majuscule pour forcer la suppression :
git branch -D test_branch-D supprime les commits qui n'existent que sur cette branche. Ces commits deviennent inaccessibles et sont finalement récupérés par le ramasse-miettes. Si vous supprimez par erreur, vous pouvez généralement récupérer le hash depuis git reflog avant que cela ne se produise.
Supprimer une branche distante
Les commandes ci-dessus ne suppriment que votre copie locale. La branche peut encore exister sur le dépôt distant (par exemple sur origin). Pour la supprimer là-bas :
git push origin --delete test_branchL'ancienne syntaxe avec les deux-points fait la même chose — elle pousse « rien » vers la branche distante, ce qui la supprime :
git push origin :test_branchPour créer une branche sur un dépôt distant, poussez une branche locale ; le premier push l'établit sur le dépôt distant et (avec -u) configure le suivi. Consultez git push et git remote pour plus de détails :
git push -u origin test_branch
# pushes test_branch to origin and tracks itUn exemple complet
Voici le cycle typique créer → travailler → fusionner → nettoyer du début à la fin :
git switch -c feature-x # create and switch to the branch
# ... edit files ...
git add .
git commit -m "Add feature X"
git switch main # back to main
git merge feature-x # bring the work in
git branch -d feature-x # delete the now-merged local branch
git push origin --delete feature-x # and remove it from the remote