Présentation de Git rebase -i

Git rebase -i est une commande qui permet de réorganiser l'historique des commits d'une branche. Elle peut sembler effrayante au premier abord, mais elle est en réalité très utile pour nettoyer l'historique des commits et améliorer la lisibilité du code.

Fonctionnement de Git rebase -i

Lorsque vous exécutez la commande

git rebase -i HEAD~4
, Git ouvre un fichier texte qui contient la liste des commits à réorganiser. Vous pouvez alors modifier cette liste pour choisir les commits à conserver, à modifier ou à supprimer.

Les commandes disponibles sont :

  • p, pick : conserver le commit
  • r, reword : conserver le commit mais modifier son message
  • s, squash : fusionner le commit avec le précédent
  • f, fixup : fusionner le commit avec le précédent et supprimer son message
  • d, drop : supprimer le commit

Exemple d'utilisation

Supposons que nous ayons les commits suivants :

pick a1b2c3d Add user model
pick e4f5g6h Fix typo in user model
pick i7j8k9l Add login endpoint
pick m0n1o2p WIP debugging login
Nous pouvons modifier cette liste pour obtenir :
r a1b2c3d Add user model
pick e4f5g6h Fix typo in user model
pick i7j8k9l Add login endpoint
d m0n1o2p WIP debugging login
Dans cet exemple, nous avons décidé de modifier le message du premier commit, de conserver les deuxième et troisième commits, et de supprimer le quatrième commit.

Sécurité et gestion des erreurs

Il est important de noter que Git rebase -i ne détruit pas les commits existants, mais crée de nouveaux commits et déplace le pointeur de la branche vers ces nouveaux commits. Les anciens commits sont toujours conservés dans la base de données d'objets de Git, mais ils ne sont plus référencés.

Si vous rencontrez des erreurs pendant le processus de réorganisation, vous pouvez utiliser la commande

git rebase --abort
pour annuler les modifications et revenir à l'état initial de la branche.

Il est également possible de créer une branche de sauvegarde avant de commencer la réorganisation, en utilisant la commande

git branch backup-before-rebase
. Cela permet de conserver l'état initial de la branche et de pouvoir revenir à cet état si nécessaire.

Conflits et résolution

Lorsque vous réorganisez les commits, il est possible que des conflits apparaissent. Dans ce cas, Git stoppe le processus de réorganisation et vous demande de résoudre les conflits. Vous pouvez alors utiliser les commandes

git add
et
git rebase --continue
pour résoudre les conflits et poursuivre la réorganisation.