Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Fusionner deux branches et résoudre un conflit Git

Après cette leçon: Je peux fusionner deux branches et résoudre un conflit.

Leçon de 60 min16 commandesLab Git et Gitea : apprendre clone, commit et push sur un serveur Git à soi

Deux prix différents pour le même pain

Une fusion (merge en anglais) réunit le travail de deux branches Git en une seule. Git le fait seul quand les changements ne se touchent pas, et vous demande de choisir quand ils se contredisent.

Deux employés d’une épicerie changent le prix du pain, chacun sur sa branche. L’un le baisse pour une promotion, l’autre l’augmente. Git ne peut pas deviner lequel garder.

À la fin de cette leçon

Remarque

Je peux fusionner deux branches et résoudre un conflit.

Mots-clés

MotCe que ça veut direExemple
Fusionreprendre dans une branche le travail d’une autregit merge
Avance rapideune fusion où Git avance seulement le nom de la branche
Commit de fusionun commit qui a deux parents
Conflitun cas où deux branches ont changé les mêmes lignes
Marques de conflitles trois lignes que Git écrit dans le fichier<<<<<<< HEAD
Résoudreécrire le texte final, puis valider

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Deux sortes de fusion existent

Si main n’a pas bougé depuis la création de la branche, Git avance simplement le nom main. C’est une avance rapide (fast-forward en anglais). Aucun commit n’est créé.

Si les deux branches ont avancé, Git crée un commit de fusion. Ce commit a deux parents : la pointe de chaque branche.

Créer le dépôt dans le dossier epicerie

Commande
git init -b main epicerie

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Écrire le tarif de départ

Commande
printf 'pain 1.10\nlait 0.95\nbeurre 2.40\n' > epicerie/tarif.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Choisir le fichier pour le commit

Commande
git -C epicerie add tarif.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Enregistrer le tarif de départ

Commande
git -C epicerie commit -m "Tarif de depart"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer la branche promo

Commande
git -C epicerie switch -c promo

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Baisser le prix du pain sur promo

Commande
printf 'pain 0.99\nlait 0.95\nbeurre 2.40\n' > epicerie/tarif.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Enregistrer la promotion

Commande
git -C epicerie commit -am "Pain en promotion"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Revenir sur la branche main

Commande
git -C epicerie switch main

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Augmenter le prix du pain sur main

Commande
printf 'pain 1.20\nlait 0.95\nbeurre 2.40\n' > epicerie/tarif.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Enregistrer l’augmentation

Commande
git -C epicerie commit -am "Augmenter le pain"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Fusionner promo dans main : conflit attendu

Commande
git -C epicerie merge promo

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Trois lignes de marque montrent les deux versions

Git a écrit les deux versions dans le fichier. La ligne <<<<<<< HEAD ouvre la version de la branche où vous êtes, ici main. La ligne ======= sépare les deux. La ligne >>>>>>> promo ferme la version de l’autre branche.

git status --short affiche UU devant ce fichier : les deux côtés l’ont modifié. Tant que les marques restent, le fichier n’est pas bon.

Lire le fichier en conflit

Commande
cat epicerie/tarif.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Résoudre : choisir le texte, effacer les marques

Pour résoudre un conflit, vous écrivez le texte final et vous effacez les trois lignes de marque. Puis git add dit à Git que c’est réglé, et git commit crée le commit de fusion.

Ici, les deux employés se mettent d’accord sur 1,05 €. L’option --no-edit garde le message que Git propose.

Écrire le prix décidé ensemble

Commande
printf 'pain 1.05\nlait 0.95\nbeurre 2.40\n' > epicerie/tarif.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Dire à Git que c’est réglé

Commande
git -C epicerie add tarif.txt

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Créer le commit de fusion

Commande
git -C epicerie commit --no-edit

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Lire l’historique après la fusion

Commande
git -C epicerie --no-pager log --format=%s

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

On croit souvent qu’un conflit veut dire que le dépôt est cassé ou que quelqu’un a fait une faute. Ce n’est pas vrai : deux personnes ont changé les mêmes lignes, et Git vous demande de choisir. Rien n’est perdu. git merge --abort revient avant la fusion.

À propos de ce labo et de sa source: Lab Git et Gitea : apprendre clone, commit et push sur un serveur Git à soi

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.