Les branches
Un pointeur de 41 octets, et HEAD qui dit où l'on se trouve.
Voici toute la branche main :
$ cat .git/refs/heads/main
7f3k9q2e8a4c1b6d5f0a9382c7e1b4d6a8f3c209Quarante caractères et un retour à la ligne. Une branche est un pointeur mobile vers un commit — pas une copie du code, pas un dossier, pas une zone de stockage. Créer une branche écrit un fichier de 41 octets : c'est pour cela que l'opération est instantanée, et qu'il ne faut pas hésiter à en créer.
HEAD dit où tu es
$ cat .git/HEAD
ref: refs/heads/mainHEAD ne désigne pas un commit mais une branche : celle sur laquelle tu te
trouves. C'est ce qui permet à Git de savoir quel pointeur faire avancer quand tu
commites.
L'enchaînement complet tient en une phrase : tu commites, HEAD dit quelle
branche est courante, cette branche avance vers le nouveau commit, dont le parent
est l'ancien.
Basculer
git switch autre-branche # bascule
git switch -c nouvelle # crée et bascule
git branch -d fusionnee # supprime, si fusionnée
git branch -D abandonnee # supprime dans tous les casgit switch et git restore ont été introduits pour séparer deux usages que
git checkout mélangeait : changer de branche, et restaurer des fichiers. Le
checkout fonctionne toujours, mais les commandes récentes disent ce qu'elles
font — préfère-les.
Basculer modifie le répertoire de travail pour refléter l'instantané visé. Git refuse si des modifications non commitées risquent d'être écrasées : c'est une protection, pas une contrariété.
La tête détachée n'est pas une erreur
git switch --detach <commit> place HEAD directement sur un commit, sans
branche. Git prévient parce que les commits créés là ne seront désignés par
rien et deviendront injoignables. C'est parfaitement légitime pour inspecter un
état ancien — il suffit de créer une branche avant de commiter si tu veux
garder ce que tu fais.
Le piège classique
Supprimer une branche ne supprime pas ses commits. Si elle a été fusionnée, ses
commits sont joignables par la branche cible et rien ne change. Si elle ne l'a
pas été, git branch -d refuse — c'est le garde-fou. Avec -D, les commits
deviennent injoignables, mais restent retrouvables plusieurs semaines par
git reflog : voir Réparer.
Autre confusion : une branche n'a pas de propriétaire ni de contenu propre. Parler de « ma branche » désigne un pointeur, dans ton dépôt. Sa contrepartie sur le serveur est un autre pointeur, qui peut désigner un autre commit — d'où le chapitre sur les dépôts distants.
Réponse unique
Que désigne `HEAD` dans un dépôt Git, en fonctionnement normal ?
Indice · Regarde le contenu de .git/HEAD.
[ METTRE EN PRATIQUE ]
Manipuler des pointeurs
3 étapes · 25 min · 120 XP
[ CETTE LEÇON DANS LES PARCOURS ]
- Fondamentauxétape 3 / 18suivant — Fusionner →
- Ingénieur DevOpsétape 6 / 23suivant — Fusionner →