Aller au contenu principal

git rebase — Historique linéaire et propre

Module 02 60 min

Objectifs de la section

  • Comprendre ce que fait git rebase et comment il diffère de git merge
  • Effectuer un rebase de base pour garder l'historique linéaire
  • Utiliser le rebase interactif pour nettoyer les commits
  • Connaître les règles d'or du rebase

Rebase vs Merge

La différence fondamentale

Merge préserve l'historique exact, rebase crée un historique linéaire et propre.

Avec rebase :

Quand utiliser quoi

SituationRecommandation
Mettre à jour votre branche avec maingit rebase main
Intégrer une fonctionnalité terminéegit merge --no-ff
Nettoyer des commits locaux avant PRgit rebase -i
Branche partagée avec d'autresgit merge (plus sûr)
La règle d'or du rebase

Ne jamais rebaser des commits qui ont déjà été poussés vers un dépôt partagé. Le rebase réécrit l'historique et créera des conflits pour vos coéquipiers.


git rebase de base

# Mettre à jour votre branche feature avec les derniers commits de main
git switch feature/login
git rebase main

# Si des conflits se produisent pendant le rebase :
# 1. Résoudre le conflit dans le fichier
git add fichier-resolu.py

# 2. Continuer le rebase
git rebase --continue

# Annuler le rebase et revenir à l'état d'avant
git rebase --abort

# Ignorer le commit actuel (cas rare)
git rebase --skip

Visualisation du processus de rebase


Rebase interactif — git rebase -i

Le rebase interactif vous permet de réécrire, combiner, supprimer ou réordonner des commits avant de les pousser.

# Rebase interactif des 3 derniers commits
git rebase -i HEAD~3

# Rebase interactif depuis un commit spécifique
git rebase -i abc1234

# Rebase interactif depuis la divergence avec main
git rebase -i main

L'éditeur interactif

Git ouvre votre éditeur avec quelque chose comme :

pick a3f4b2c feat: ajout formulaire de connexion
pick b7c9d1e fix: corriger validation email
pick c2e8f3a docs: mettre à jour README

# Commandes :
# p, pick = utiliser le commit
# r, reword = utiliser le commit, mais modifier le message
# e, edit = utiliser le commit, mais s'arrêter pour amender
# s, squash = utiliser le commit, mais le fusionner avec le précédent
# f, fixup = comme squash, mais supprimer le message de ce commit
# d, drop = supprimer le commit

Exemples pratiques de rebase interactif

Combiner plusieurs commits (squash)

git rebase -i HEAD~3

# Dans l'éditeur, changer :
pick a3f4b2c feat: ajout formulaire de connexion
squash b7c9d1e fix: corriger validation email # ← changer pick en squash
squash c2e8f3a fix: autre correction # ← changer pick en squash

# Git combine les 3 commits en un seul et vous demande un nouveau message

Corriger un message de commit

git rebase -i HEAD~2

# Dans l'éditeur :
reword a3f4b2c fix # ← changer pick en reword
pick b7c9d1e feat: login

# Git s'arrête sur ce commit et ouvre l'éditeur pour le message

Supprimer un commit

git rebase -i HEAD~3

# Dans l'éditeur :
pick a3f4b2c feat: login
drop b7c9d1e WIP: commit temporaire # ← changer pick en drop
pick c2e8f3a feat: tableau de bord

Résumé des commandes clés

CommandeDescription
git rebase <branche>Rebaser sur une branche
git rebase -i HEAD~NRebase interactif des N derniers commits
git rebase --continueContinuer après résolution
git rebase --abortAnnuler le rebase
git rebase --skipIgnorer le commit actuel

Prochaines étapes