Par Anonyme (non vérifié) , 29 avril 2026

Pourquoi le rebase interactif

Le rebase interactif réécrit une séquence de commits en une histoire plus propre et plus significative avant publication. C'est l'instrument chirurgical de Git : vous pouvez réordonner, éditer, fusionner (squash), corriger (fixup), supprimer, reformuler ou diviser des commits, le tout en une seule session guidée. Le maîtriser transforme une branche locale en désordre en une histoire que les relecteurs peuvent suivre.

La liste de tâches

Exécuter git rebase -i ouvre un éditeur avec une liste de tâches. Chaque ligne a un verbe et un commit. Réordonnez les lignes pour réordonner les commits. Changez les verbes pour changer le comportement.

git rebase -i HEAD~5

Les verbes incluent pick (utiliser le commit), reword (éditer uniquement le message), edit (s'arrêter pour amender), squash (combiner avec le précédent, conserver les deux messages), fixup (combiner, supprimer le message), drop (supprimer) et exec (exécuter une commande shell entre les commits). Deux verbes plus récents sont break (pause inconditionnelle) et label/reset/merge pour le graphe de merge du rebase (depuis Git 2.18).

Diviser un commit

Marquez le commit avec edit, puis défaites et recommitez :

git reset HEAD^
git add -p
git commit -m "Premier changement logique"
git add -p
git commit -m "Second changement logique"
git rebase --continue

Workflow autosquash

Quand vous repérez une faute de frappe dans un commit antérieur, créez un commit fixup, puis laissez le rebase les ordonner automatiquement :

git commit --fixup=<sha>
git rebase -i --autosquash HEAD~10

Configurez rebase.autoSquash = true pour en faire le défaut. Combinez avec rebase.autoStash = true pour que les arbres de travail sales ne bloquent pas le rebase.

Exec pour vérification

Utilisez les lignes exec pour vérifier que chaque commit compile et que les tests passent — inestimable pour maintenir une histoire bisectable :

git rebase -i --exec "cargo test" main

Chaque commit entre HEAD et main sera examiné et la commande exécutée. Si elle échoue, le rebase s'arrête pour que vous puissiez corriger et continuer.

Rebase de merges avec --rebase-merges

Le rebase traditionnel aplatit les merges. Passez --rebase-merges pour préserver la topologie :

git rebase -i --rebase-merges main

Erreurs courantes

Faire un rebase de commits publiés force les collaborateurs à de la chirurgie d'historique. Réservez le rebase interactif aux branches que vous seul possédez, ou coordonnez explicitement. Oublier git rebase --continue après résolution des conflits laisse le rebase à moitié appliqué. Utilisez git status — il vous dit exactement quoi faire. Enfin, si vous détruisez du travail, git reflog le sauve presque toujours.

Récupération

Si un rebase tourne mal, abandonnez et recommencez :

git rebase --abort
git reflog
git reset --hard HEAD@{5}