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.