Une branche Git est un simple pointeur mobile vers un commit. Créer une branche ne copie rien : Git crée juste un fichier de 41 octets contenant le hash du commit. C’est cette légèreté qui rend le branchement Git quasi instantané et encourage à créer des branches pour chaque fonctionnalité, correction ou expérimentation. Ce guide vous apprend à créer, basculer, fusionner et supprimer tes branches, avec les commandes essentielles et les pièges classiques à éviter.
Prérequis : Enregistrer des modifications et Consulter l’historique.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre qu’une branche est un pointeur léger vers un commit
- Créer, lister, renommer et supprimer des branches locales
- Basculer entre branches avec
git switch(etcheckout) - Comprendre le rôle de
HEADdans la navigation entre branches
Qu’est-ce qu’une branche ?
Section intitulée « Qu’est-ce qu’une branche ? »Imaginez une ligne de Post-it sur un mur. Chaque Post-it est un
commit. La branche main est simplement une étiquette collée sur le
dernier Post-it de la série. Quand vous faites un nouveau commit,
l’étiquette se déplace sur le nouveau Post-it.
En termes techniques :
- Un commit contient un snapshot du projet, un message, et un pointeur vers son (ou ses) parent(s).
- Une branche est un pointeur mobile vers un commit.
- HEAD est un pointeur spécial qui indique sur quelle branche vous travaillez actuellement.
main ↓C1 ← C2 ← C3 ↑ HEADDans ce schéma, main pointe vers le commit C3, et HEAD pointe
vers main. Vous êtes donc « sur la branche main ».
Créer une branche
Section intitulée « Créer une branche »-
Créez une branche avec
git branch:Fenêtre de terminal git branch feature/loginCela crée un nouveau pointeur
feature/loginsur le commit actuel. Vous n’avez pas basculé dessus — HEAD pointe toujours surmain:main ← HEAD↓C1 ← C2 ← C3↑feature/login -
Basculez sur la nouvelle branche :
Fenêtre de terminal git switch feature/loginHEAD pointe maintenant vers
feature/login:main↓C1 ← C2 ← C3↑feature/login ← HEAD -
Vérifiez quelle branche est active :
Fenêtre de terminal git branchLa branche courante est marquée d’un astérisque
*:main* feature/login
Raccourci : créer et basculer en une commande
Section intitulée « Raccourci : créer et basculer en une commande »git switch -c feature/loginAvec git checkout (syntaxe historique) :
git checkout -b feature/loginTravailler sur une branche
Section intitulée « Travailler sur une branche »Quand vous faites un commit sur feature/login, seul ce pointeur
avance. main reste en place :
main ↓C1 ← C2 ← C3 ← C4 ↑ feature/login ← HEADSi un collègue pousse un commit sur main pendant ce temps :
C4 ← C5 (main) /C1 ← C2 ← C3 \ C6 ← C7 (feature/login ← HEAD)Les deux lignes de développement évoluent indépendamment. C’est tout l’intérêt des branches : isoler le travail.
Lister les branches
Section intitulée « Lister les branches »| Commande | Description |
|---|---|
git branch | Branches locales |
git branch -a | Branches locales + distantes |
git branch -v | Branches avec dernier commit |
git branch --merged | Branches déjà fusionnées dans HEAD |
git branch --no-merged | Branches non encore fusionnées |
Basculer entre les branches
Section intitulée « Basculer entre les branches »# Revenir sur maingit switch main
# Revenir à la branche précédente (comme cd -)git switch -Supprimer une branche
Section intitulée « Supprimer une branche »Une fois la branche fusionnée, supprimez-la pour garder un dépôt propre :
# Supprimer une branche fusionnéegit branch -d feature/loginSi la branche n’a pas été fusionnée, Git refuse la suppression pour éviter une perte de données. Pour forcer :
git branch -D feature/loginRenommer une branche
Section intitulée « Renommer une branche »# Renommer la branche courantegit branch -m nouveau-nom
# Renommer une branche spécifiquegit branch -m ancien-nom nouveau-nomHEAD : le pointeur spécial
Section intitulée « HEAD : le pointeur spécial »HEAD est la réponse à la question « où suis-je ? » dans Git :
- Normalement, HEAD pointe vers une branche (ex.
main), qui elle-même pointe vers un commit. - Si vous faites
git checkout <hash-commit>directement, HEAD pointe vers un commit sans passer par une branche : c’est le mode HEAD détaché (detached HEAD).
Pour vérifier où pointe HEAD :
git log --oneline -1# oucat .git/HEADLa première commande montre le commit, la seconde la référence
symbolique (ex. ref: refs/heads/main).
Dépannage : problèmes courants
Section intitulée « Dépannage : problèmes courants »| Symptôme | Cause probable | Solution |
|---|---|---|
error: Your local changes would be overwritten | Modifications non commitées | git stash ou git commit avant de switcher |
error: branch 'x' is not fully merged | Suppression d’une branche non fusionnée | Vérifiez avec git log main..x, puis -D si voulu |
fatal: A branch named 'x' already exists | Branche déjà créée | git switch x pour basculer dessus |
HEAD detached at abc1234 | Checkout sur un commit/tag | git switch -c ma-branche pour créer une branche |
À retenir
Section intitulée « À retenir »- Une branche = un pointeur de 41 octets vers un commit (quasi gratuit en ressources)
- HEAD indique votre position actuelle dans le graphe de commits
git switch -c nomcrée et bascule sur une branche en une commandegit branch -dsupprime une branche fusionnée,-Dforce la suppression- Créez des branches souvent : une branche par fonctionnalité, correction ou expérimentation