W3docs

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.

git branch

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 main toujours 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.

git branch1

Options courantes

CommandeCe qu'elle fait
git branchListe les branches locales (identique à git branch --list) ; la branche courante est marquée d'un *.
git branch -vListe 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 -aListe toutes les branches — locales et de suivi distant.
git branch -rListe uniquement les branches de suivi distant.
git branch --mergedListe les branches déjà fusionnées dans la branche courante (suppression sans risque).
git branch --no-mergedListe 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.

git branch2

Créer une branche au commit actuel :

git branch test_branch

Un nouveau pointeur vers le commit actuel est créé ; rien d'autre ne bouge :

git branch3

Créer une branche ne vous y bascule pasHEAD 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_branch

La 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 commit

Lister 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_branch

Ajoutez -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 README

Pour 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
# * main

Renommer 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-name

Pour renommer une autre branche, donnez l'ancien et le nouveau nom :

git branch -m old-name new-name

Si 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
Avertissement

-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_branch

L'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_branch

Pour 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 it

Un 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

Pratique

Pratique
Quelles sont les fonctionnalités de la commande 'git branch' ?
Quelles sont les fonctionnalités de la commande 'git branch' ?
Was this page helpful?