Supprimer des commits fautifs avec Git

Posted About 12 years ago. Visible to the public.

Pour supprimer des commits fautifs qui ont été placés dans un dépôt Git distant (par un git push), dont on sait qu'ils n'ont pas encore été référencés par d'autres utilisateurs -- parce que l'on est omniscient, mais pas pour autant clairvoyant...

Revenir à l'état désiré

$ git reset --hard <commit hash>

Forcer cet état comme le dernier état du dépôt

$ git push --force origin master

Ce faisant, on diverge de la ligne des commits maladroits et leur historique est délibérément perdu. Ces commits ne sont alors plus référencés -- dès lors qu'il n'y avait effectivement aucun tag ou autre référence -- et ils seront supprimés au prochain garbage collect exécuté par l'administrateur du dépôt distant.

Attention

Ces commandes sont susceptibles d'engendrer le chaos lorsque plusieurs utilisateurs collaborent sur le même dépôt. S'il existait déjà des références aux commits que l'on souhaite annuler, tels qu'un tag ou un commit réalisé par un autre utilisateur (pas omniscient celui-là), alors elles résulteront en un micmac prodigieux: d'une part, les commits ne seront pas supprimés par le garbage collect; d'autre part, l'autre utilisateur possède une base de code orpheline et sera bien en peine de la raccrocher à la branche principale.

Références

Last edit
About 12 years ago
Posted by olange to Git (2012-03-18 17:47)