Mémo Git · Réécrire l'historique

Rebase interactif

git rebase -i <commit>

git rebase -i <commit> ouvre la liste des commits qui suivent ce commit. Pour chacun, tu choisis une action : le garder, le renommer, le modifier, le fusionner avec le précédent ou le supprimer. Tu peux aussi changer leur ordre.

Ce que ça fait

Réorganise une série de commits : réordonner, renommer, fusionner, modifier ou supprimer.

Un cas d'usage

Avant d'ouvrir ta pull request, tu regroupes les commits « wip » et corriges les messages.

Attention : Réécrit l'historique : à éviter sur des commits que d'autres ont déjà récupérés.

En ligne de commande

git rebase -i HEAD~5
Retouche les 5 derniers commits.
pick
Garde le commit tel quel.
reword
Garde le commit, mais change son message.
edit
S'arrête sur le commit pour le modifier (git commit --amend, puis git rebase --continue).
squash / fixup
Fusionne avec le commit précédent, en combinant les messages ou en gardant celui du précédent.
drop
Supprime le commit.

Dans Merathon

  1. Clic droit sur le commit le plus ancien à retoucher → « Rebase interactif de <branche> depuis ce commit… ».
  2. Choisis une action par commit : Garder, Renommer, Modifier, Fusionner, Fixup ou Supprimer.
  3. Glisse les lignes pour changer l'ordre, puis clique sur « Lancer le rebase ».
  4. Si le rebase s'arrête (conflit ou « Modifier »), le bandeau du panneau de droite propose « Continuer ».

Questions fréquentes

Comment annuler un rebase interactif ?

Pendant le rebase, git rebase --abort. Après, git reflog puis git reset --hard <hash d'avant>.

Qu'est-ce que git commit --fixup ?

git commit --fixup <commit> crée un commit de correction ; git rebase -i --autosquash le place et le fusionne tout seul.

Voir aussi