Synopsis
git rebase [-i] [--onto <newbase>] [<upstream> [<branch>]]
Description
The git rebase command moves a sequence of commits to a new base. It rewrites history by replaying each commit on top of the new base, producing a linear chain rather than a merge commit. Rebasing is invaluable for keeping feature branches up to date, cleaning up local history before pushing, and squashing fixup commits.
Because rebasing creates new commits with different SHAs, never rebase commits that have been published and pulled by others — they will end up with diverging histories. The interactive mode (-i) lets you reorder, edit, squash, drop, or fix up commits.
Dans l'usage quotidien, git rebase s'intègre étroitement avec les alias de shell, les plugins d'éditeur et l'intégration continue. Les utilisateurs avancés ajoutent souvent des alias combinant les flags qu'ils passent toujours, ou enveloppent la commande dans des scripts qui appliquent les conventions d'équipe. Le formatage de la sortie peut être personnalisé via la configuration Git — pretty formats, schémas de couleurs et comportement du pager sont tous ajustables. Quand quelque chose tourne mal, la première étape de diagnostic est généralement de relancer la commande avec GIT_TRACE=1 dans l'environnement, ce qui révèle les appels de plomberie sous-jacents. Pour les situations inhabituelles, la sortie --help (git rebase --help) ouvre la page de manuel complète avec les détails de chaque option, y compris celles rarement utilisées dans les workflows ordinaires mais essentielles pour le débogage ou le scripting à grande échelle.
Comprendre comment git rebase interagit avec le reste du modèle de données de Git — la base d'objets, l'index, les refs et l'arborescence de travail — est rentable. Chaque commande opère sur un sous-ensemble de ces pièces, et savoir laquelle elle touche aide à prédire les résultats et récupérer après les erreurs. Lire la documentation officielle de Git en parallèle de la pratique sur un dépôt jetable est la façon la plus rapide d'intérioriser les subtilités. La plupart des problèmes de production avec Git proviennent de l'une de trois causes : comportement par défaut surprenant, opérations réseau partielles, ou réécriture d'historique déjà partagé. Un modèle mental fonctionnel des effets de bord de git rebase aide à éviter les trois.
Options courantes
| Option | Description |
|---|---|
-i, --interactive | Ouvrir un éditeur pour manipuler la liste de commits. |
--onto <newbase> | Rebase sur un commit arbitraire, pas l'upstream. |
--continue | Reprendre après résolution des conflits. |
--abort | Annuler le rebase et retourner à l'état d'origine. |
--skip | Sauter le patch courant et continuer. |
--autosquash | Ordonner automatiquement les commits fixup/squash. |
--autostash | Stasher les changements locaux avant le rebase et les pop après. |
-r, --rebase-merges | Préserver les merge commits pendant le rebase. |
Exemples
git rebase main
# Rejouer les commits de la branche courante sur main
git rebase -i HEAD~5
# Éditer interactivement les 5 derniers commits
git rebase --onto main feature-base feature-tip
# Déplacer seulement les commits entre feature-base et feature-tip sur main
git rebase --continue
# Reprendre après résolution des conflits
Erreurs fréquentes
Rebasing public, shared branches breaks every collaborator's history. Reserve rebase for local cleanup. During conflict resolution, beginners often run git commit instead of git rebase --continue, leaving the rebase in a broken state. If you get lost mid-rebase, git rebase --abort always returns you to safety.
Commandes liées
git merge, git cherry-pick, git reflog, git pull --rebase