ParcoursOuvrir l'appli

Les branches : travailler en parallèle

Git et GitHub · 40 min

Une ligne d'histoire parallèle

Imagine : ton projet marche. Tu veux essayer une grosse idée, mais tu as peur de tout casser. Tu pourrais copier le dossier entier... ou utiliser une branche.

main     A --- B --- C ------------- F   (fusion)
                      \             /
essai                  D --- E ----

Ici, main a les commits A, B, C. On crée la branche essai à partir de C, on y fait D et E. Puis on fusionne essai dans main : le commit F réunit les deux.

main est le nom de la branche principale, créée automatiquement. Dans les vrais projets, main contient toujours une version qui marche, et on développe chaque nouveauté dans sa propre branche.

Les commandes des branches

Commande Effet
git branch liste les branches. Une étoile * marque celle où tu es.
git branch essai crée une branche essai (sans y aller)
git switch essai va sur la branche essai : tes fichiers changent pour refléter cette branche
git switch -c essai crée la branche et y va, en une commande (-c pour create)
git merge essai ramène les commits de essai dans la branche où tu te trouves
git branch -d essai supprime la branche (une fois fusionnée)

Tu verras aussi git checkout dans beaucoup de tutoriels : c'est l'ancienne commande, qui fait la même chose que git switch (et bien d'autres choses, ce qui la rendait confuse).

Pratique : Ta première branche

Le dépôt ml-parcours a déjà un commit. Tu vas essayer une idée dans une branche, puis la fusionner. Tape git branch et ls souvent pour voir ce qui change.

Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer

Les conflits : quand deux branches se disputent

Si deux branches modifient la même ligne du même fichier de façons différentes, Git ne peut pas deviner laquelle garder. Il s'arrête et te demande de choisir.

Git écrit alors ceci dans le fichier :

<<<<<<< HEAD
version de la branche où tu es
=======
version de la branche que tu fusionnes
>>>>>>> essai

Résoudre un conflit, en 4 étapes

  1. Ouvre le fichier et trouve les marques.
  2. Choisis : garde une version, l'autre, ou un mélange des deux. Supprime les trois lignes de marques <<<<<<<, ======= et >>>>>>>.
  3. Prépare le fichier : git add fichier.
  4. Termine la fusion : git commit -m "Fusionne essai".

Pratique : Provoque et résous un conflit

Tu vas faire modifier la même ligne par deux branches. Pour remplacer tout le contenu d'un fichier, utilise echo "..." > README.md (une seule flèche).

Quand le conflit arrive, ouvre le fichier avec code README.md, garde la version que tu préfères, retire les trois lignes de marques, enregistre, puis git add et git commit.

Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer

Teste-toi

Tu es sur la branche essai et tu tapes git merge main. Que se passe-t-il ?
  1. Les commits de essai vont dans main
  2. Les commits de main arrivent dans essai (bonne réponse)
  3. Les deux branches sont supprimées
  4. Rien, il faut être sur main

git merge X ramène X dans la branche courante. Pour mettre essai dans main, il faut être sur main.

Un fichier contient <<<<<<< HEAD, ======= et >>>>>>> essai. Que dois-tu faire ?
  1. Supprimer le fichier
  2. Annuler tout avec git restore
  3. Choisir le contenu à garder, retirer les marques, puis git add et git commit (bonne réponse)
  4. Recommencer le projet

C'est un conflit de fusion : tu décides du contenu final, tu effaces les marques, et tu termines la fusion par un commit.