Comment supprimer un commit spécifique dans Git Bash et Vim

Banner Nasio Themes French

Découvrez comment supprimer des commits de l’historique Git comme un pro en utilisant la puissante méthode interactive rebase. Ce tutoriel suppose que vous avez une expérience de base avec Git.

Il peut arriver que vous fassiez un commit dans Git et que vous reveniez sur votre décision plus tard. Peut-être avez-vous fait un commit qui contient des modifications de code dont vous n’avez plus besoin ou vous avez fait un commit par erreur. Vous pouvez essayer de corriger les choses manuellement sur votre branche et faire un autre commit sans ces changements, mais cela vous laissera avec un historique de commit désordonné. Beaucoup d’organisations préfèrent garder une chronologie Git propre et vous demanderont, en tant que développeur, de ne garder que les « commits de valeur » et de supprimer tous les commits qui ne sont pas nécessaires. Une chronologie Git propre rend notre vie de développeur beaucoup plus facile, car elle rend le code plus facile à lire et à maintenir. Cependant, si vous ne savez pas comment supprimer un commit spécifique dans Git et que votre patron vous demande de le faire (comme dans ma situation), cela peut rendre votre vie moins simple que vous ne le souhaiteriez. C’est pourquoi j’ai décidé de partager mon expérience, afin que vous n’ayez pas à lutter comme je l’ai fait la première fois. Avant de vous montrer comment supprimer un commit spécifique de l’historique Git avec rebase interactif et Vim, voici un petit rafraîchissement au cas où vous en auriez besoin.

Qu’est-ce que le rebase interactif ?

Le rebase interactif dans Git est un outil puissant qui vous permet de contrôler manuellement le processus de révision de l’historique dans Git. Il est particulièrement utile lorsque vous souhaitez supprimer, ajouter ou modifier un commit spécifique, ainsi que fusionner plusieurs commits en un seul plus important.

Qu’est-ce que l’historique des commits ?

Il s’agit d’une fonction assez explicite qui affiche une liste de commits dans une structure arborescente. La façon la plus simple de voir l’historique des livraisons est d’utiliser la commande git log dans git bash :

git log --oneline

Cette commande vous donnera une liste de tous les hashs de commit, en commençant par le plus récent. (Ne paniquez pas si vous ne savez pas comment quitter l’écran, vous pouvez le faire en toute sécurité en tapant « q », qui signifie quitter dans Vim).

Illustration 1 : Historique des commits dans Git

Qu’est-ce que Vim ?

Vim est l’éditeur de texte par défaut de Git Bash. Ce tutoriel suppose que vous utilisez Vim comme éditeur de Git Bash. Vim est loin d’être un éditeur de texte intuitif. Cependant, il fait du bon travail et est particulièrement utile pour les opérations interactives de rebase, c’est-à-dire pour supprimer les commits inutiles de l’historique Git.

Jusqu’à présent, tout va bien. Dans la capture d’écran ci-dessus, nous venons de voir les cinq derniers commits que nous avons faits dans Git. Maintenant, disons que nous voulons supprimer le quatrième commit le plus récent avec le hash 6ebf351. Pour ce faire, ajoutez la ligne suivante dans Git bash :

git rebase -i HEAD~4

HEAD~4 points vers le 4ᵉ dernier commit par rapport à l’en-tête de la branche. Remplacez le numéro par le commit que vous souhaitez voir supprimé de l’historique.

La commande ci-dessus devrait vous amener à l’interface Vim et vous verrez une liste avec les quatre derniers commits.

Illustration 2 : Le rebase interactif avec Vim

Dans Vim, appuyez sur esc pour utiliser le mode d’édition, puis sélectionnez la ligne que vous souhaitez modifier, et appuyez sur dd (deux fois la clé d) pour supprimer la ligne. Enfin, enregistrez et quittez (esc), cette fois en utilisant la commande :wq.

Après avoir effectué le rebase, n’oubliez pas de pousser vos changements :

git push origin +branch

Enfin, vérifiez votre historique dans le journal Git et le quatrième commit le plus récent ne devrait plus être visible.