TP 2 : Branches, merge, rebase et résolution de conflits
Module : 1 – Versioning et collaboration avec Git & GitHub Durée indicative : 2h Prérequis : TP 1 terminé
Objectifs
- Créer et gérer des branches.
- Pratiquer le merge fast-forward, le merge 3-way et le rebase.
- Résoudre un conflit.
- Utiliser
stash,cherry-picket les tags.
Contexte
Vous continuez à versionner les configurations réseau du TP 1, en isolant chaque changement dans une branche dédiée.
Étape 1 – Merge fast-forward
git switch -c feature/vlan-guestAjoutez une configuration VLAN dans un nouveau fichier, commitez, puis revenez sur main et fusionnez :
git switch main
git merge feature/vlan-guestObservez que le pointeur main avance simplement (fast-forward).
Étape 2 – Merge 3-way
Créez deux branches à partir de main (feature/dhcp, feature/dns), faites un commit différent dans chacune, puis fusionnez les deux dans main. Observez le commit de fusion créé par git log --graph.
Étape 3 – Conflit et résolution
- Sur
main, modifiez l’adresse IP demikrotik-router1.rscet commitez. - Sur une branche
feature/renumberingcréée avant ce commit, modifiez la même ligne avec une autre valeur. - Fusionnez
feature/renumberingdansmainet résolvez le conflit affiché entre<<<<<<<et>>>>>>>. - Terminez avec
git addpuisgit commit.
Étape 4 – Rebase
Créez une branche feature/ospf, ajoutez un commit, puis pendant ce temps faites avancer main avec un autre commit. Rebasez feature/ospf sur main :
git switch feature/ospf
git rebase mainComparez l’historique avant/après avec git log --oneline --graph --all.
Étape 5 – stash, cherry-pick, tags
Trois outils ponctuels : mettre de côté un changement, copier un commit vers une autre branche, marquer un commit précis.
- Modifiez un fichier sans commit, mettez le changement de côté avec
git stash, changez de branche, puis récupérez-le avecgit stash pop. - Récupérez un commit précis d’une branche vers une autre avec
git cherry-pick <hash>. - Taguez l’état actuel de
main:git tag -a v1.0.0 -m "Première version stable des configs".
Rendu attendu
- Un historique montrant au moins un merge fast-forward, un merge 3-way et un rebase.
- Un conflit résolu et documenté (capture avant/après).
- Un tag
v1.0.0présent (git tag).
Points de vérification
-
git log --graphdistingue clairement les trois types de fusion. - Aucun marqueur de conflit (
<<<<<<<) ne subsiste dans les fichiers. -
git taglistev1.0.0.