Comment inverser une fusion Git
Agence web » Actualités du digital » Comment inverser une fusion Git

Comment inverser une fusion Git

Faire accidentellement la mauvaise chose est très courant lorsque vous travaillez avec Git, mais heureusement, il est conçu pour garder une trace de l’historique des versions de votre référentiel. Il existe toujours un moyen d’annuler les modifications apportées, et si vous souhaitez annuler une fusion Git, c’est assez simple.

Annuler une fusion Git

Fondamentalement, il existe deux façons de procéder, et tout dépend si vous avez déjà appliqué ou non les modifications à votre contrôle de source. Si vous vous êtes déjà engagé et poussé vers un service comme GitHub, il est généralement considéré comme immuable, à moins que vous ne vouliez forcer le push, ce qui est dangereux. Vous ne voulez jamais « supprimer » les commits, et les fusions git sont ajoutées en tant que « merge commits ». Vous voudrez utiliser git revert pour annuler les modifications en toute sécurité et valider cette annulation en tant que nouveau commit.

Cependant, si vous venez de gâcher quelque chose localement, maudit votre clavier et recherché une solution sur Google, vous pouvez toujours supprimer en toute sécurité le commit de fusion et garder votre historique Git propre avec un simple git reset.

Réinitialisation locale

Il est plus simple et plus sûr de gérer les réinitialisations de Git avec un client GUI Git, où vous pouvez facilement voir l’historique de la branche. Ce n’est bien sûr pas nécessaire, mais le visuel aide lorsque vous avez des branches complexes.

Dans cet exemple, nous souhaitons annuler la fusion de la branche de fonctionnalité dans la branche principale. Étant donné que la branche de fonctionnalité n’a pas été touchée, nous souhaitons réinitialiser l’étiquette de la branche « principale » pour qu’elle pointe vers le dernier commit.

Pour ce faire, nous voulons git checkout la branche principale, puis réinitialisez au commit précédent. Le raccourci pour cela est HEAD^, et nous pouvons effectuer une réinitialisation matérielle au dernier commit. Si vous n’êtes pas à l’aise avec une réinitialisation « destructrice », vous pouvez effectuer une réinitialisation logicielle, puis annuler manuellement les modifications de validation de fusion.

git reset --hard HEAD^

Comme vous pouvez le voir, cela supprime complètement le commit de fusion et laisse la branche de fonctionnalité intacte.

Si le commit que vous devez réinitialiser n’est pas le dernier avant le HEAD actuel de la branche, vous pouvez simplement copier l’ID SHA1 pour celui-ci et le réinitialiser à ce commit spécifique.

Annuler un commit qui a déjà été poussé

Malheureusement, si vous avez déjà poussé, il n’y a aucun moyen de supprimer le commit de fusion sans écraser l’historique de votre référentiel. Vous pouvez suivre les mêmes étapes que celles indiquées ci-dessus et pousser vers le référentiel en amont (comme GitHub) avec le --force drapeau. Mais cela est généralement considéré comme destructeur et dangereux lorsque vous avez plusieurs collaborateurs, car ils devront tous mettre à jour leurs dépôts locaux.

L’autre façon d’annuler les commits dans Git est de les annuler. L’annulation d’un commit appliquera les modifications opposées au référentiel – pour chaque ligne ajoutée, cette ligne est supprimée. Pour tout ce qui a été supprimé, il est rajouté, et ainsi de suite. Cela inverse efficacement la validation, l’inconvénient étant que ce processus encombrera un peu votre historique de version. Généralement cependant, c’est une bonne pratique pour inverser les erreurs.

Annuler un commit est assez simple. Tout d’abord, vous devrez courir git log pour obtenir une liste des commits et leurs numéros d’identification.

Ensuite, vous pouvez copier le hachage SHA1 et annuler le commit avec git revert:

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Vous devrez pousser ce nouveau « revert commit » vers GitHub pour résoudre le problème.

★★★★★