Exercice 02 : Créer et Merger des Branches
🎯 Objectifs
À la fin de cet exercice, vous serez capable de :
- ✅ Créer une nouvelle branche
- ✅ Changer de branche et travailler dessus
- ✅ Fusionner une branche dans main
- ✅ Nettoyer les branches après merge
- ✅ Comprendre quand et pourquoi utiliser les branches
Durée estimée : 20 minutes
Difficulté : ⭐⭐☆☆☆ (Débutant+)
Prérequis :
- Avoir complété Exercice 01 (connaître les bases de Git)
- Ou avoir un repository Git existant avec au moins 1 commit
📖 Contexte
Les branches vous permettent de :
- Travailler en parallèle - Plusieurs personnes sur différentes fonctionnalités
- Tester des idées - Expérimenter sans risque
- Organiser le travail - Features, bugfixes, releases séparées
- Code review - Vérifier le code avant de merger
Cet exercice vous montre comment créer, utiliser et merger des branches de la manière professionnelle.
📋 Énoncé
Vous allez :
- Créer le repository du Exercice 01 (si ce n'est pas fait)
- Créer une branche
feature/documentation - Ajouter du contenu sur cette branche
- Faire 2 commits
- Revenir sur
main - Merger la branche
- Vérifier l'historique
- Supprimer la branche devenue inutile
Résultat attendu :
- 2 branches créées et mergées
- Au moins 5 commits au total
maincontient tous les changements
🔧 Matériel Nécessaire
- Git : déjà installé (de Exercice 01)
- Repository :
ma-premiere-app(ou créer nouveau) - Éditeur : Notepad, nano, VS Code, ou autre
- Terminal : même qu'avant
- Temps : 30 minutes
🧭 Déroulement de l'exercice
Voici les grandes étapes à réaliser dans l'ordre. Chaque étape décrit ce que vous devez accomplir - à vous de trouver la commande. La solution complète est disponible si vous êtes bloqué.
Tâche 1 : Vérifier l'état du repository
Assurez-vous que vous avez bien un repository avec au moins 1 commit, et identifiez sur quelle branche vous vous trouvez.
Indice : Une commande liste toutes les branches locales et marque la branche courante avec un
*.
Vérification : Vous devez voir * main (ou * master) dans la liste des branches.
Tâche 2 : Créer la branche feature/documentation
Créez une nouvelle branche nommée exactement feature/documentation. Elle doit apparaître dans la liste des branches sans que vous ayez changé de branche.
Indice : Il existe deux approches : créer la branche sans y basculer, ou créer ET basculer en une seule commande. Commencez par la première pour bien comprendre la différence.
Vérification : git branch doit lister feature/documentation ET * main (vous êtes encore sur main).
Tâche 3 : Basculer sur la nouvelle branche
Changez de branche pour vous retrouver sur feature/documentation. Confirmez que vous y êtes bien.
Indice : Il existe deux commandes équivalentes pour changer de branche :
checkout(historique) etswitch(moderne).
Vérification : L'astérisque * dans git branch doit être sur feature/documentation.
Tâche 4 : Travailler sur la branche - faire 2 commits
Créez un fichier CONTRIBUTING.md avec du contenu, faites un premier commit. Ensuite ajoutez du contenu supplémentaire et faites un deuxième commit.
Indice : Ces commits n'affectent PAS
main. Vérifiez en basculant sur main et en consultantgit log --oneline: vos nouveaux commits ne doivent pas apparaître sur main.
Vérification : Depuis feature/documentation, git log --oneline doit montrer 2 commits de plus que depuis main.
Tâche 5 : Revenir sur main et merger
Retournez sur main, puis intégrez les changements de feature/documentation dans main.
Indice : Pour merger une branche dans
main, vous devez d'abord ÊTRE surmain. On merge DEPUIS la branche de destination, pas depuis la branche source.
Vérification : Après le merge, git log --oneline depuis main doit montrer les commits de votre feature.
Tâche 6 : Nettoyer - supprimer la branche mergée
Une branche mergée est inutile. Supprimez feature/documentation.
Indice :
git brancha une option pour supprimer une branche locale. Elle refusera de supprimer une branche non-mergée (par sécurité).
Question à se poser : Pourquoi ne peut-on pas supprimer la branche sur laquelle on se trouve en ce moment ?
Vérification : git branch ne doit plus lister feature/documentation.
� Mini-Projet : Développer une fonctionnalité en isolation
Vous allez simuler le développement d'une nouvelle fonctionnalité sur une branche dédiée, puis l'intégrer proprement dans main.
Scénario : Votre projet a besoin d'une page "À propos" et d'une page "Contact". Chaque page doit être développée sur sa propre branche.
Ce que vous devez réaliser :
- Partez du repository
ma-premiere-appavec au moins 1 commit surmain - Créez une branche
feature/aboutet ajoutez un fichierabout.mdavec 2 commits - Revenez sur
mainet créez une branchefeature/contactavec un fichiercontact.mdet 2 commits - Mergez
feature/aboutdansmain - Mergez
feature/contactdansmain - Supprimez les deux branches feature
- Vérifiez l'historique final
Checkpoints de validation :
git log --oneline mainaffiche au moins 5 commits (1 initial + 2 par feature)- Les fichiers
about.mdETcontact.mdexistent dansmain git branchliste uniquement* main(plus de branches feature)- Chaque merge a été fait depuis
main(pas l'inverse) git log --oneline --graphmontre deux lignes de branches qui convergent versmaingit statusaffiche "nothing to commit, working tree clean"
�📚 Étapes Détaillées
Étape 1 : Préparer le Repository
Objectif : S'assurer que vous avez un repository avec quelques commits
Instructions:
Si vous venez du Exercice 01, allez à l'Étape 2. Sinon :
- Aller dans votre repository :
cd ma-premiere-app- Vérifier que vous avez des commits :
git log --onelineRésultat attendu :
a7f3e1b Ajouter .gitignore
8b4a6c2 Ajouter script Python Hello World
3a2c8f7 Initialiser le projet avec READMETroubleshooting:
- Problème : Pas de commits
- Solution : Compléter Exercice 01 d'abord
Étape 2 : Lister les Branches Existantes
Objectif : Voir où vous êtes actuellement
Instructions:
- Lister toutes les branches locales :
git branchRésultat attendu :
* mainExplication :
- L'astérisque
*indique que vous êtes surmain - Généralement, vous commencez avec une branche
mainoumaster
Étape 3 : Créer Une Branche de Fonctionnalité
Objectif : Créer une branche pour une nouvelle fonctionnalité
Instructions:
- Créer une branche appelée
feature/documentation:
git branch feature/documentation- Vérifier qu'elle a été créée :
git branchRésultat attendu :
feature/documentation
* mainNote : La branche existe maintenant, mais vous êtes toujours sur main.
Étape 4 : Changer de Branche
Objectif : Basculer vers la nouvelle branche
Instructions:
- Changer vers
feature/documentation:
git checkout feature/documentationAlternativement (syntaxe moderne) :
git switch feature/documentation- Vérifier que vous êtes sur la bonne branche :
git branchRésultat attendu :
* feature/documentation
mainL'astérisque est maintenant sur feature/documentation.
Étape 5 : Travailler sur la Branche
Objectif : Ajouter du contenu spécifique à cette branche
Instructions:
- Créer un fichier
CONTRIBUTING.md:
echo "# Guide de Contribution
Merci de contribuer à ce projet!
## Processus
1. Fork le repo
2. Créer une branche feature
3. Faire vos changements
4. Faire une Pull Request
" > CONTRIBUTING.md- Vérifier le contenu :
cat CONTRIBUTING.md- Vérifier le statut Git :
git statusRésultat attendu :
On branch feature/documentation
Untracked files:
(use "git add <file>..." to include in what will be committed)
CONTRIBUTING.md
nothing added to commit but untracked files present (tracking starts after first commit)Étape 6 : Faire le Premier Commit sur la Branche
Objectif : Enregistrer vos changements
Instructions:
- Ajouter et committer :
git add CONTRIBUTING.md
git commit -m "Ajouter guide de contribution"Résultat attendu :
[feature/documentation 5b2c9d8] Ajouter guide de contribution
1 file changed, 8 insertions(+)
create mode 100644 CONTRIBUTING.mdÉtape 7 : Faire un Deuxième Commit
Objectif : Ajouter plus de contenu pour simuler le travail
Instructions:
- Créer un fichier
INSTALL.md:
echo "# Installation
## Prérequis
- Python 3.8+
## Étapes
1. Clone le repo
2. Installer les dépendances : pip install -r requirements.txt
3. Lancer l'app : python main.py
" > INSTALL.md- Ajouter et committer :
git add INSTALL.md
git commit -m "Ajouter instructions d'installation"Résultat attendu :
[feature/documentation 7c3f1e9] Ajouter instructions d'installation
1 file changed, 7 insertions(+)
create mode 100644 INSTALL.mdÉtape 8 : Vérifier l'Historique de la Branche
Objectif : Voir tous les commits de cette branche
Instructions:
- Voir l'historique complet :
git log --onelineRésultat attendu :
7c3f1e9 Ajouter instructions d'installation
5b2c9d8 Ajouter guide de contribution
a7f3e1b Ajouter .gitignore
8b4a6c2 Ajouter script Python Hello World
3a2c8f7 Initialiser le projet avec README- Voir les commits de
mainque vous avez laissés derrière :
git log main --onelineRésultat attendu :
a7f3e1b Ajouter .gitignore
8b4a6c2 Ajouter script Python Hello World
3a2c8f7 Initialiser le projet avec READMEExplication :
feature/documentationa 2 commits supplémentairesmainn'a pas bougé
Étape 9 : Revenir sur Main
Objectif : Retourner à la branche main pour faire le merge
Instructions:
- Changer vers
main:
git checkout mainou
git switch main- Vérifier les fichiers :
ls -laRésultat attendu (Windows - dir) :
README.md
main.py
.gitignore
.gitObservation importante :
Les fichiers CONTRIBUTING.md et INSTALL.md ont disparu !
C'est parce que vous avez changé de branche. Ces fichiers n'existent que sur feature/documentation.
Étape 10 : Merger la Branche
Objectif : Intégrer les changements de feature/documentation dans main
Instructions:
- Vérifier que vous êtes sur
main:
git branchRésultat attendu :
feature/documentation
* main- Merger
feature/documentation:
git merge feature/documentationRésultat attendu :
Updating a7f3e1b..7c3f1e9
Fast-forward
CONTRIBUTING.md | 8 +++++++
INSTALL.md | 7 +++++++
2 files changed, 15 insertions(+)
create mode 100644 CONTRIBUTING.md
create mode 100644 INSTALL.mdExplication :
Fast-forward= Les commits de feature/documentation ajoutés directement à main- Les deux fichiers sont maintenant sur main
Étape 11 : Vérifier que le Merge a Réussi
Objectif : Confirmer que les changements sont sur main
Instructions:
- Vérifier que les fichiers existent :
ls -laRésultat attendu :
CONTRIBUTING.md
INSTALL.md
README.md
main.py
.gitignore
.git- Vérifier l'historique :
git log --onelineRésultat attendu :
7c3f1e9 Ajouter instructions d'installation
5b2c9d8 Ajouter guide de contribution
a7f3e1b Ajouter .gitignore
8b4a6c2 Ajouter script Python Hello World
3a2c8f7 Initialiser le projet avec READMEMain a maintenant tous les commits !
Étape 12 : Supprimer la Branche
Objectif : Nettoyer les branches devenues inutiles
Instructions:
- Lister les branches :
git branchRésultat attendu :
feature/documentation
* main- Supprimer
feature/documentation:
git branch -d feature/documentationRésultat attendu :
Deleted branch feature/documentation (was 7c3f1e9).- Vérifier la suppression :
git branchRésultat attendu :
* mainSeule main reste.
✅ Vérification du Résultat
Pour vérifier que vous avez réussi :
# Vérifier les branches
git branch # Doit montrer seulement main
# Vérifier l'historique
git log --oneline # Doit montrer 5 commits
# Vérifier les fichiers
ls -la # Doit montrer CONTRIBUTING.md et INSTALL.md
# Vérifier un commit spécifique
git show 5b2c9d8 # Doit montrer le commit de contributionChecklist finale :
- ✅ Branche
feature/documentationcréée et supprimée - ✅ 2 commits faits sur la branche
- ✅ Merge réussi vers main
- ✅ 5 commits visibles dans l'historique
- ✅ Fichiers CONTRIBUTING.md et INSTALL.md présents dans main
🎮 Défi Bonus
Défi 1 : Créer et merger plusieurs branches
# Créer une branche de bugfix
git branch bugfix/typo
# Changer vers la branche
git checkout bugfix/typo
# Faire un commit
echo "Correction : typo dans README" >> README.md
git add README.md
git commit -m "Fixer typo dans README"
# Revenir à main
git checkout main
# Merger
git merge bugfix/typo
# Nettoyer
git branch -d bugfix/typoDéfi 2 : Visualiser l'historique avec graphique
# Voir l'historique en arbre (si vous aviez eu plusieurs branches actives)
git log --graph --oneline --all
# Voir aussi les branches et leurs relationships
git branch -vDéfi 3 : Expérimenter avec git checkout
# Voir tous les commits avec plus de détails
git log --oneline --all --graph
# Visiter un commit ancien sans merger
git checkout <commit-hash>
# Revenir à main
git checkout main💡 Points Clés à Retenir
- Branches isolées : Les changements d'une branche n'affectent pas les autres
- Checkout vs Merge : Checkout = changer de branche, Merge = fusionner
- Fast-forward : Quand possible, Git remet simplement le pointeur en avant
- Branches locales : Par défaut, les branches sont locales à votre ordinateur
- Nettoyage : Supprimer les branches après merge garde le repo propre
🎯 Prochaines Étapes
- ✅ Vous savez créer et merger des branches
- 🔜 Exercice suivant : Résoudre les conflits de fusion
- 🚀 Index des exercices : Tous les exercices
Excellent travail ! Vous comprenez maintenant comment travailler avec les branches ! 🎉