Annuler le rebasage dans Git

Azhar Bashir Khan 29 mars 2022
Annuler le rebasage dans Git

Ce tutoriel parlera de l’annulation d’un rebase effectué sur une branche dans Git.

Le rebasage est l’opération consistant à déplacer la base d’une branche vers une base plus récente. Supposons que nous ayons une branche de fonctionnalité basée sur la branche principale. Ensuite, la branche principale a de nouveaux commits ; nous voudrons peut-être rebaser la branche de fonctionnalité en fonction de ces nouvelles.

On peut repenser cette opération de rebase. Nous ne voulons plus baser la nouvelle branche de fonctionnalité sur les nouveaux commits de la branche principale.

Nous voulons que la branche de fonctionnalité soit basée sur les commits lorsque nous l’avons créée pour la première fois à partir de la branche principale. Ainsi, pour y parvenir, il faut maintenant annuler l’opération de rebase effectuée sur la branche.

Nous allons maintenant illustrer cela avec un exemple.

Utiliser git reflog et git reset pour annuler un rebase fait sur une branche dans Git

Disons que nous avons une branche main et que nous avons créé une nouvelle branche feature1 par-dessus.

Et disons que certains commits ont eu lieu dans la branche main. Nous avons fait un rebase de la nouvelle branche feature1 basé sur ces nouveaux commits. C’est l’opération que nous voulons annuler.

Pour annuler le rebase, nous pouvons utiliser la commande reflog de Git. En utilisant git reflog, nous pouvons déterminer le commit principal de la branche juste avant le début du rebase.

Nous allons maintenant lancer la commande git reflog sur la branche feature1 (celle sur laquelle rebase a été fait)

$ git reflog

b745978 HEAD@{0}: rebase: that commit
4sd7c1c HEAD@{1}: rebase: this commit
adf3d3d HEAD@{2}: checkout: moving from main to feature1
...

On peut voir que HEAD@{2} était le commit juste avant l’opération rebase.

Nous pouvons utiliser git reset pour réinitialiser la branche sur ce commit comme suit.

$ git reset HEAD@{2} --hard

Après avoir exécuté la commande ci-dessus, la branche feaure1 est maintenant dans un état juste avant le rebase.

Alternativement, on peut également annuler un rebase en utilisant git reset comme suit.

$ git reset --hard ORIG_HEAD

Le ORIG_HEAD est créé par des commandes qui déplacent considérablement votre HEAD pour enregistrer la position de la HEAD avant leur opération afin que vous puissiez facilement remettre la pointe de la branche dans l’état avant de les exécuter.

La mise en garde à cette approche alternative est qu’aucune autre opération n’aurait dû être effectuée après le rebase indésirable qui peut modifier le ORIG_HEAD à savoir reset, rebase, ou merge.

Ainsi, nous pouvons annuler un rebase indésirable sur une branche dans Git grâce à ces méthodes.

Article connexe - Git Rebase