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-pick et 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-guest

Ajoutez une configuration VLAN dans un nouveau fichier, commitez, puis revenez sur main et fusionnez :

git switch main
git merge feature/vlan-guest

Observez 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

  1. Sur main, modifiez l’adresse IP de mikrotik-router1.rsc et commitez.
  2. Sur une branche feature/renumbering créée avant ce commit, modifiez la même ligne avec une autre valeur.
  3. Fusionnez feature/renumbering dans main et résolvez le conflit affiché entre <<<<<<< et >>>>>>>.
  4. Terminez avec git add puis git 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 main

Comparez l’historique avant/après avec git log --oneline --graph --all.

Étape 5 – stash, cherry-pick, tags

stash, cherry-pick, tag stash, cherry-pick, tag 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 avec git 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.0 présent (git tag).

Points de vérification

  • git log --graph distingue clairement les trois types de fusion.
  • Aucun marqueur de conflit (<<<<<<<) ne subsiste dans les fichiers.
  • git tag liste v1.0.0.