Gestion des branches dans Git
Pour suivre les étapes de cette section, vous pouvez cloner le dépôt git-branch.
git clone https://github.com/archambaultv-prof/git-branch.git
Conceptuellement, nous avons vu jusqu'à maintenant qu'un dépôt Git est constitué
du répertoire courant, de l'index, du pointeur HEAD
et de l'historique des
commits. Nous allons maintenant ajouter la notion de branches.
Le répertoire courant est l'endroit où vous travaillez, c'est-à-dire
le dossier qui contient les fichiers de votre projet. L'index est une zone de
préparation qui contient les fichiers qui seront validés lors de la prochaine
validation. Le pointeur HEAD
est un pointeur spécial qui indique l'endroit où
vous vous trouvez dans l'historique du projet. Nous savons maintenant que les branches
sont aussi des pointeurs vers des validations dans l'historique du projet.
En fait, en pratique, HEAD
est généralement un pointeur vers une branche (c'est donc
un pointeur vers un pointeur), mais il peut aussi pointer directement vers une
validation (on parle alors de "detached HEAD"). Lorsque HEAD
pointe vers une
branche, cela signifie que vous travaillez sur cette branche. Concrètrement cela
signifie que lorsque le pointeur HEAD
sera mise à jour après une validation,
la branche vers laquelle il pointe sera aussi mise à jour avec la nouvelle validation.
Donc la branche courante est la branche sur laquelle vous travaillez actuellement, dans le sens où le pointeur de cette branche est constamment mis à jour lorsque vous effectuez des validations.
Lister les branches disponibles
Pour lister les branches disponibles dans votre dépôt, vous pouvez utiliser la commande suivante :
git branch
* main
Cette commande affiche la liste des branches locales dans votre dépôt. La branche
courante est indiquée par un astérisque (*
) à côté de son nom. Le dépôt que vous avez cloné
contient en réalité trois branches sur le serveur. Pour lister les branches
distantes, vous pouvez utiliser la commande suivante :
git branch -r
origin/HEAD -> origin/main
origin/agentjean
origin/asterix
origin/main
Cela nous indique que le dépôt distant (origin) contient trois branches
agentjean
, asterix
et main
. Le pointeur HEAD
du serveur pointe vers la branche
main
, ce qui signifie que c'est la branche par défaut du dépôt distant.
Créer une nouvelle branche locale
Pour créer une nouvelle branche locale, vous pouvez utiliser la commande suivante :
git switch -c luckyluke
L'option -c
permet de créer une nouvelle branche et de basculer dessus. Il
existe aussi la commande git checkout -b luckyluke
qui fait la même chose,
mais la commande git switch
est plus récente et plus intuitive pour changer
de branche.
Pour confirmer que vous êtes bien sur la nouvelle branche, vous pouvez
utiliser la commande git branch
:
git branch
* luckyluke
main
Ajoutons un fichier fichierC.txt
dans cette nouvelle branche et validons-le :
echo "Arizona 1880" > fichierC.txt
git add fichierC.txt
git commit -m "Ajout de fichierC.txt pour Lucky Luke"
Créer une nouvelle branche à partir d'une branche distante
Nous avons vu comment créer une nouvelle branche locale à partir de la branche courante. Il est aussi possible de créer une nouvelle branche à partir d'une branche distante. Pour cela, vous pouvez utiliser la commande suivante :
git switch --track origin/agentjean
Cela va créer une nouvelle branche locale agentjean
qui suit la branche distante
origin/agentjean
. Vous pouvez vérifier que la branche a été créée et que vous
êtes bien dessus en utilisant la commande git branch -vv
:
git branch -vv
* agentjean 6ae575b [origin/agentjean] Ajout du 3e album
luckyluke 63d22ec Ajout de fichierC.txt pour Lucky Luke
main e488189 [origin/main] Validation initiale
L'option -vv
permet d'afficher les branches locales avec leur
correspondance avec les branches distantes. Vous pouvez voir que la branche
agentjean
est à jour avec la branche distante origin/agentjean
. La branche
luckyluke
est une branche locale qui n'a pas de correspondance avec une
branche distante, et la branche main
est à jour avec la branche distante
origin/main
.
Changer de branche
Pour simplement changer de branche, sans en créer une nouvelle, vous
pouvez utiliser la commande git switch
suivie du nom de la branche :
git switch main