Arc 2 Quête 06

L'Arbre des Possibles

Branches, switch et timelines parallèles

Introduction

Le Maître Archiviste te convoque dans une salle que tu n'avais jamais vue auparavant. Au centre, un immense arbre de cristal s'élève du sol au plafond. Ses branches translucides pulsent d'une lumière douce, et chacune semble contenir des images mouvantes - des fragments d'histoires différentes, des futurs parallèles du royaume.

« Apprenti, jusqu'à présent, tu as travaillé sur une seule ligne du temps - une chronique unique, linéaire, où chaque événement suit le précédent. Mais les grands Archivistes savent quelque chose que les novices ignorent : l'histoire n'a pas qu'un seul chemin possible. Regarde cet arbre. Chaque branche représente une timeline parallèle - un futur possible pour le royaume. On peut explorer ces branches, y consigner des événements, et décider plus tard laquelle deviendra la chronique officielle. C'est le pouvoir des branches Git. »

Qu'est-ce qu'une branche ?

Jusqu'ici, tous tes commits se sont enchaînés sur une seule branche : main (anciennement "master"). C'est la chronique officielle - la timeline principale du projet.

Une branche est simplement un pointeur mobile vers un commit. Quand tu crées une branche, tu crées une timeline parallèle où tu peux travailler sans affecter la timeline principale.

Pourquoi utiliser des branches ?

  • Expérimenter sans risque : tu testes une idée sur une branche. Si ça marche, tu la gardes. Sinon, tu la supprimes.
  • Travailler en parallèle : pendant qu'un collègue travaille sur une fonctionnalité, tu travailles sur une autre, chacun sur sa branche.
  • Garder main propre : la branche principale ne contient que du code validé et testé.

Voir les branches existantes

Pour lister toutes les branches de ton dépôt :

git branch

La branche courante est marquée d'une étoile * et apparaît en vert :

* main

Pour l'instant, tu n'as qu'une seule branche. Ça va changer.

Créer une nouvelle branche

Pour créer une branche sans y basculer :

git branch <nom>

Exemple :

git branch expedition-nord

Cela crée une branche expedition-nord qui pointe vers le même commit que ta branche actuelle. Mais tu es toujours sur main - tu n'as pas changé de timeline.

Vérifie :

git branch
  expedition-nord
* main

L'étoile est toujours sur main.

Basculer sur une branche

La commande moderne : git switch

git switch expedition-nord

C'est la méthode recommandée depuis Git 2.23. Simple, claire, sans ambiguïté.

L'ancienne méthode : git checkout

git checkout expedition-nord

Tu verras git checkout dans beaucoup de tutoriels et de projets existants. Ça fonctionne, mais git switch est plus explicite car git checkout fait aussi d'autres choses (restaurer des fichiers, par exemple).

Utilise git switch pour changer de branche. C'est plus clair et ça évite les erreurs.

Créer et basculer en une seule commande

Tu peux combiner la création et le basculement :

git switch -c nouvelle-branche

Ou avec l'ancienne syntaxe :

git checkout -b nouvelle-branche

L'option -c (pour "create") crée la branche et y bascule immédiatement. C'est la commande que tu utiliseras le plus souvent.

HEAD - Le marqueur de position

HEAD est un pointeur spécial qui indique où tu te trouves dans l'historique. Plus précisément, HEAD pointe vers la branche courante, qui elle-même pointe vers un commit.

HEAD -> main -> commit C3
         expedition-nord -> commit C3

Quand tu fais git switch expedition-nord :

         main -> commit C3
HEAD -> expedition-nord -> commit C3

Et quand tu fais un nouveau commit sur expedition-nord :

         main -> commit C3
HEAD -> expedition-nord -> commit C4

La branche main reste sur C3 pendant que expedition-nord avance vers C4. Ce sont deux timelines qui divergent.

Supprimer une branche

Suppression sécurisée

git branch -d nom-de-la-branche

L'option -d (minuscule) supprime la branche uniquement si elle a été fusionnée. C'est une sécurité : Git refuse de supprimer une branche qui contient du travail non intégré.

Suppression forcée

git branch -D nom-de-la-branche

L'option -D (majuscule) supprime la branche même si elle n'a pas été fusionnée. À utiliser avec précaution - le travail non fusionné sera perdu (enfin, pas vraiment perdu, mais beaucoup plus difficile à retrouver).

Tu ne peux pas supprimer la branche sur laquelle tu te trouves. Bascule d'abord sur une autre branche.

Exercice pratique - Les Chroniques parallèles

Le royaume fait face à un dilemme. Deux expéditions doivent être documentées : une vers le Nord, dans les Montagnes de Givre, et une vers le Sud, dans la Forêt d'Émeraude. Chaque expédition mérite sa propre chronique, sa propre timeline. À toi de les créer, Archiviste.

Étape 1 - Créer le dépôt

Crée un nouveau dossier et initialise un dépôt Git :

mkdir chroniques-paralleles
cd chroniques-paralleles
git init -b main

Étape 2 - Premier commit sur main

Crée un fichier de base et fais ton premier commit :

echo "# Chroniques du Royaume" > chroniques.md
git add chroniques.md
git commit -m "Créer le registre des chroniques du royaume"

Étape 3 - Créer la branche expedition-nord

git branch expedition-nord

Étape 4 - Basculer sur expedition-nord

git switch expedition-nord

Vérifie que tu es bien sur la bonne branche :

git branch

Tu devrais voir l'étoile sur expedition-nord.

Étape 5 - Commiter sur expedition-nord

Crée un fichier et commite-le :

echo "Jour 1 : L'expédition quitte la cité vers les Montagnes de Givre." > nord.md
git add nord.md
git commit -m "Ajouter le journal de l'expédition nord"

Étape 6 - Revenir sur main

git switch main

Remarque : le fichier nord.md a disparu de ton dossier ! Il n'existe que sur la branche expedition-nord. Pas de panique, il est en sécurité dans cette timeline.

Étape 7 - Créer et basculer sur expedition-sud

Cette fois, combine les deux en une seule commande :

git switch -c expedition-sud

Étape 8 - Commiter sur expedition-sud

echo "Jour 1 : L'expédition s'enfonce dans la Forêt d'Émeraude." > sud.md
git add sud.md
git commit -m "Ajouter le journal de l'expédition sud"

Étape 9 - Lister toutes les branches

git branch

Tu devrais voir trois branches : expedition-nord, expedition-sud (avec l'étoile), et main.

Étape 10 - Vérifier

Lance le script de vérification pour valider ta quête :

Bash (Linux / macOS / Git Bash sur Windows) :

bash verifier.sh

PowerShell (Windows) :

.\verifier.ps1

Le script vérifie :

  1. Tu es dans un dépôt Git
  2. La branche expedition-nord existe
  3. La branche expedition-sud existe
  4. La branche expedition-nord contient au moins un commit propre
  5. La branche expedition-sud contient au moins un commit propre
  6. Il y a au moins 3 branches au total
  7. Tu es de retour sur la branche main

Récapitulatif des commandes

Commande Description
git branchLister les branches
git branch <nom>Créer une branche
git switch <nom>Basculer sur une branche
git checkout <nom>Basculer sur une branche (ancienne syntaxe)
git switch -c <nom>Créer une branche et basculer dessus
git checkout -b <nom>Créer et basculer (ancienne syntaxe)
git branch -d <nom>Supprimer une branche (sécurisé)
git branch -D <nom>Supprimer une branche (forcé)

Tu contemples l'Arbre des Possibles. Trois branches brillent désormais d'un éclat distinct - trois timelines parallèles, chacune racontant une histoire différente. Le Maître Archiviste pose sa main sur ton épaule.

« Tu vois, Archiviste ? L'histoire n'est plus une simple ligne droite. Tu sais désormais créer des futurs parallèles, naviguer entre eux, et voir le monde différemment selon la branche où tu te trouves. Mais créer des branches n'est que le début. Bientôt, tu apprendras à les réunir - à fusionner les timelines pour n'en garder que le meilleur. C'est la véritable maîtrise de l'Arbre des Possibles. »