Rez-de-chausséeG GitPièce 3/7Débutant

Les branches

Créer une branche pour travailler à part, changer de branche, fusionner avec git merge, puis lire et résoudre un conflit.

Ce que tu vas apprendre

  • Pourquoi travailler sur une branche plutôt que directement sur main.
  • Créer une branche, passer de l'une à l'autre et les lister.
  • Fusionner avec git merge, et résoudre un conflit sans paniquer.

Pourquoi brancher

Ton portfolio est en ligne et fonctionne. Tu veux ajouter un champ de recherche, ce qui va prendre plusieurs jours. Pendant ce temps, quelqu'un te signale une faute sur la page d'accueil.

Si tu travailles directement sur main, ta recherche à moitié finie se mélange à la correction. Une branche règle ça : c'est une ligne de travail à part. Tu développes la recherche sur sa branche, tu corriges la faute sur main, et tu réunis les deux quand la recherche est prête.

Une branche n'est qu'une étiquette posée sur un commit. La créer ne copie aucun fichier : c'est instantané, même sur un gros projet.

Créer une branche et y aller

git switch -c recherche

Décortiquons cette commande :

Anatomie d’une commande
$

Programme · git

Le programme à lancer : Git.

  • Programme
  • Sous-commande
  • Option
  • Argument

L'option -c (pour create) crée la branche recherche sur le commit actuel, puis t'y place. Les commits que tu feras ensuite partiront sur recherche, et main ne bougera pas.

Changer de branche

git switch main

Git remet les fichiers du dossier dans l'état du dernier commit de main. Ton travail sur recherche n'est pas perdu : il t'attend sur sa branche.

Fais un commit, ou au moins un git status, avant de changer de branche. Si des modifications non enregistrées entrent en conflit avec l'autre branche, Git refuse de changer pour ne rien écraser.

Tu verras aussi git checkout dans beaucoup de tutoriels. Cette commande reste valable, mais elle fait beaucoup de choses différentes. git switch est la commande recommandée pour changer de branche.

Lister les branches

git branch

La branche où tu te trouves est marquée d'une étoile. Pour supprimer une branche déjà fusionnée :

git branch -d recherche

Seule l'étiquette disparaît. Les commits restent dans l'historique de la branche où ils ont été fusionnés.

Fusionner avec git merge

Pour réunir deux branches, place-toi sur celle qui doit recevoir le travail, puis fusionne l'autre :

git switch main
git merge recherche

Selon l'historique, Git fait l'une de ces deux choses.

Le commit de fusion

Si main a reçu des commits pendant que tu travaillais sur recherche, les deux histoires ont divergé. Git crée alors un commit de fusion, qui a deux parents. Suis le scénario complet :

Créer une branche puis la fusionner 1 / 8
C1C2mainHEAD
$ git log --oneline

Point de départ : deux commits sur main.

L'avance rapide

Si main n'a pas bougé depuis la création de la branche, rien ne diverge. Git avance simplement l'étiquette main jusqu'au dernier commit de la branche, sans créer de commit de fusion. On parle d'avance rapide (fast-forward).

Fusion en avance rapide 1 / 4
C1C2maincorrectifHEAD
$ git switch -c correctif

Nouvelle branche sur C2.

Les conflits

Parfois, les deux branches ont modifié les mêmes lignes du même fichier. Git ne peut pas deviner laquelle garder : il s'arrête et annonce un conflit. Ce n'est pas une erreur grave, juste une question qu'il te pose.

Lire un conflit

git status liste les fichiers en conflit. Dans chacun, Git a inséré des marqueurs :

<<<<<<< HEAD
<h1>Bienvenue sur mon portfolio</h1>
=======
<h1>Mon portfolio</h1>
>>>>>>> recherche
  • Entre <<<<<<< HEAD et ======= : la version de ta branche actuelle, ici main.
  • Entre ======= et >>>>>>> recherche : la version de la branche que tu fusionnes.

Résoudre un conflit

  1. Ouvre le fichier et choisis le bon contenu : l'une des versions, l'autre, ou un mélange des deux.
  2. Supprime les trois lignes de marqueurs.
  3. Indique à Git que le conflit est réglé, puis termine la fusion :
git add index.html
git commit

Git propose un message de fusion déjà rempli : tu peux le garder tel quel.

Les éditeurs comme VS Code repèrent ces marqueurs et proposent des boutons pour garder une version ou l'autre. Le principe reste le même.

Si tu préfères tout annuler et revenir à l'état d'avant la fusion :

git merge --abort
Avant de faire git add, vérifie qu'il ne reste aucun marqueur <<<<<<< ou >>>>>>> dans le fichier. Sinon, ils partent dans le commit et cassent ta page.

À retenir

  • Une branche est une étiquette sur un commit : la créer est instantané et ne copie rien.
  • git switch -c nom crée une branche et s'y place, git switch nom change de branche.
  • git merge fusionne en avance rapide si rien n'a divergé, sinon avec un commit de fusion.
  • Un conflit se résout en éditant le fichier, en retirant les marqueurs, puis git add et git commit.
  • git merge --abort annule une fusion en cours.

Pour aller plus loin

Sources officielles

Ensuite

Projet
Lignes de code
Niveau
Rez-de-chaussée
Appartement
Git
Pièce
3/7
Plan n°
git/03.branches
Lignes de code · fiches rédigées à partir des documentations officielles, sources citées en bas de chaque page.