Maîtriser la création, la gestion et la fusion des branches Git.
Durée estimée : 30-40 minutes
- Créer et changer de branche
- Travailler sur plusieurs branches en parallèle
- Fusionner des branches (merge)
- Résoudre des conflits de merge
- Supprimer des branches
- Visualiser l'historique des branches
- Avoir terminé l'Exercice 1 (ou connaître les bases : init, add, commit)
- Un dépôt Git initialisé
-
Créez un nouveau projet ou utilisez celui de l'exercice 1
mkdir projet-branches cd projet-branches git init -
Créez un fichier initial sur la branche main
echo "# Mon Projet" > README.md git add README.md git commit -m "Initial commit"
-
Vérifiez sur quelle branche vous êtes
git branch # Vous devriez voir * main -
Créez une nouvelle branche pour une fonctionnalité
git branch feature/header
-
Listez toutes les branches
git branch # Vous devriez voir : # * main # feature/header
-
Changez vers la nouvelle branche
git checkout feature/header # OU avec la nouvelle syntaxe git switch feature/header -
Vérifiez que vous avez changé de branche
git branch # Maintenant * devrait être sur feature/header
-
Créez un nouveau fichier dans votre branche
echo "<header>Mon Header</header>" > header.html git add header.html git commit -m "Add header component"
-
Modifiez le README dans cette branche
echo "" >> README.md echo "## Header Feature" >> README.md echo "Nous avons ajouté un header." >> README.md git add README.md git commit -m "Update README with header info"
-
Vérifiez l'historique de cette branche
git log --oneline # Vous devriez voir vos 3 commits
-
Retournez sur la branche main
git checkout main
-
Listez les fichiers
ls # header.html n'existe PAS ici ! -
Vérifiez le contenu du README
cat README.md # Les modifications de la branche feature/header n'y sont pas -
Voyez l'historique de main
git log --oneline # Vous ne voyez que le commit initial
Observation importante : Les fichiers et commits de feature/header n'existent que sur cette branche. C'est ça la magie des branches !
-
Créez et changez vers une autre branche (en une commande)
git checkout -b feature/footer
-
Créez un fichier footer
echo "<footer>Mon Footer</footer>" > footer.html git add footer.html git commit -m "Add footer component"
-
Visualisez toutes vos branches
git log --graph --oneline --all # Vous verrez l'arbre des branches
-
Retournez sur main
git checkout main
-
Mergez la branche footer dans main
git merge feature/footer # Vous verrez "Fast-forward" -
Vérifiez que footer.html est maintenant dans main
ls # footer.html est là ! cat footer.html -
Vérifiez l'historique
git log --oneline # Le commit de footer est maintenant dans main
-
Mergez la branche header dans main
git merge feature/header
-
Regardez le message de commit automatique
- Git ouvrira un éditeur avec un message par défaut
- Sauvegardez et fermez (
:wqdans vim, ou Ctrl+X dans nano)
-
Vérifiez que header.html est maintenant dans main
ls # header.html et footer.html sont tous les deux là ! -
Visualisez l'historique graphique
git log --graph --oneline --all # Vous verrez le merge commit avec deux parents
-
Créez une branche pour modifier le README
git checkout -b update-readme-v1 echo "" >> README.md echo "Version 1 du texte" >> README.md git add README.md git commit -m "Update README version 1"
-
Retournez sur main et créez une autre branche
git checkout main git checkout -b update-readme-v2 echo "" >> README.md echo "Version 2 du texte" >> README.md git add README.md git commit -m "Update README version 2"
-
Mergez la première branche dans main
git checkout main git merge update-readme-v1
-
Essayez de merger la deuxième branche
git merge update-readme-v2 # CONFLIT ! 🔥
-
Vérifiez le statut
git status # Vous verrez "both modified: README.md" -
Ouvrez README.md dans votre éditeur
cat README.md # Vous verrez quelque chose comme : # <<<<<<< HEAD # Version 1 du texte # ======= # Version 2 du texte # >>>>>>> update-readme-v2
-
Résolvez le conflit
- Éditez le fichier pour garder les deux versions :
# Mon Projet ## Header Feature Nous avons ajouté un header. Version 1 du texte Version 2 du texte
- Supprimez les marqueurs
<<<<<<<,=======, et>>>>>>>
-
Marquez le conflit comme résolu
git add README.md
-
Finalisez le merge
git commit -m "Resolve merge conflict between v1 and v2" -
Vérifiez que le merge est terminé
git status # Devrait dire "nothing to commit"
-
Listez toutes les branches
git branch
-
Supprimez les branches mergées
git branch -d feature/header git branch -d feature/footer git branch -d update-readme-v1 git branch -d update-readme-v2
-
Vérifiez qu'il ne reste que main
git branch # Seulement * main -
Visualisez l'historique final
git log --graph --oneline --all
Simulez un vrai workflow de développement :
- Créez une branche
feature/navbar - Ajoutez 3 commits dedans
- Créez une branche
bugfix/typodepuis main - Faites 1 commit dedans
- Mergez les deux branches dans main
- Supprimez les branches
- Créez deux branches qui modifient le MÊME fichier aux MÊMES lignes
- Mergez-les pour créer un conflit
- Résolvez le conflit en gardant le meilleur des deux versions
- Créez une branche et mergez-la dans main
- Réalisez que c'était une erreur
- Utilisez
git reset --hard HEAD~1pour annuler le merge ⚠️ ATTENTION : Cette commande supprime des commits !
Utilisez ces commandes pour mieux comprendre vos branches :
git log --graph --oneline --decorate --all
git log --graph --pretty=format:'%h - %s (%ar) <%an>'- Créer une branche avec
git branchougit checkout -b - Changer de branche avec
git checkoutougit switch - Comprendre que chaque branche a son propre état
- Merger des branches avec
git merge - Comprendre Fast-forward vs Merge commit
- Créer et résoudre des conflits de merge
- Supprimer des branches avec
git branch -d - Visualiser l'historique avec
git log --graph
# Créer et naviguer
git branch <nom> # Créer une branche
git branch # Lister les branches
git checkout <nom> # Changer de branche
git checkout -b <nom> # Créer et changer
git switch <nom> # Changer (nouvelle syntaxe)
git switch -c <nom> # Créer et changer (nouvelle syntaxe)
# Merger
git merge <branche> # Merger une branche
git merge --abort # Annuler un merge en cours
# Nettoyer
git branch -d <nom> # Supprimer une branche (safe)
git branch -D <nom> # Forcer la suppression
# Visualiser
git log --graph --oneline --all # Voir l'arbre des branches
git branch -v # Branches avec dernier commitQuand la branche cible n'a pas avancé depuis la création de la branche à merger, Git déplace simplement le pointeur.
Avant : main: A---B
\
feature: C---D
Après : main: A---B---C---D
Quand les deux branches ont avancé, Git crée un commit de merge avec deux parents.
Avant : main: A---B---E
\
feature: C---D
Après : main: A---B---E---M
\ /
feature: C---D
Se produit quand les deux branches ont modifié les mêmes lignes d'un fichier.
Marqueurs de conflit :
<<<<<<< HEAD
Votre version (branche actuelle)
=======
Leur version (branche à merger)
>>>>>>> nom-de-la-branche
- Quelle est la différence entre
git branchetgit checkout -b? - Pourquoi est-il important de supprimer les branches après merge ?
- Comment éviter les conflits de merge ?
- Que se passe-t-il avec les fichiers quand vous changez de branche ?
- Quelle est la différence entre Fast-forward et Merge commit ?
Les réponses sont dans solution.md !
# ❌ MAUVAIS : Créer une branche depuis une mauvaise branche
git checkout feature/ancienne
git checkout -b feature/nouvelle # Nouvelle branche part de l'ancienne !
# ✅ BON : Toujours partir de main à jour
git checkout main
git pull origin main
git checkout -b feature/nouvelle# ❌ MAUVAIS : Essayer de changer de branche avec des modifications non commitées
git checkout autre-branche
# Erreur !
# ✅ BON : Commiter ou stasher d'abord
git add .
git commit -m "WIP"
# OU
git stash
git checkout autre-branche# ❌ MAUVAIS : Forcer la suppression sans vérifier
git branch -D feature/importante # Perte de travail !
# ✅ BON : Utiliser -d qui refuse si non mergée
git branch -d feature/importante
# Git vous avertira si vous risquez de perdre du travailEspace pour vos notes :
Ce que j'ai appris aujourd'hui...
Difficultés rencontrées...
Questions à approfondir...
- Git Branching - Basic Branching and Merging
- Learn Git Branching - Visualisation interactive
- Atlassian Git Branching Tutorial
Félicitations ! Vous maîtrisez maintenant les branches Git ! 🎉
Prêt pour le dernier exercice ? → Exercice 3 : Collaboration