Comment supprimer un commit de Github

0
15

Si vous avez accidentellement commis quelque chose que vous n'auriez pas dû, et que vous l'avez poussé vers Github, il y a encore moyens de le supprimer ou de le modifier. Habituellement, vous ne voulez pas vous mêler de l'historique de Git, mais dans certains cas, cela peut être sûr lorsqu'il est fait correctement.

Ne faites pas cela si vous pouvez l'éviter

Supprimer les commits de l'historique de Git est généralement une mauvaise idée. Git est destiné à suivre chaque version de vos fichiers, et il existe toujours des alternatives à la suppression, comme git revert, qui garderont l'historique intact.

Une fois qu'il est sur un référentiel distant , comme Github, il est beaucoup plus difficile de se débarrasser complètement du commit. C'est parce que toute autre personne utilisant le référentiel aura sa propre copie locale de ce référentiel, et la suppression forcée d'un commit entraînera une désynchronisation.

Il y a encore quelques raisons de le faire, mais vous avez peut-être accidentellement déposé des données privées dans un dépôt public, qui seraient toujours visibles dans l'historique, quoi que vous fassiez. Cela causera des problèmes à vos collègues, mais même dans ce cas, c'est possible avec une poussée forcée.

Fixer les commits localement

Si vous travaillez localement et que vous n'avez pas encore poussé vos modifications vers Github, vous pouvez réinitialiser ou modifier en toute sécurité les commits qui ne sont pas sur la télécommande. Git suit votre répertoire local, organise les modifications en interne et conserve un historique Git. Tout cela est synchronisé avec la télécommande, mais uniquement lors de l'exécution de push/pull. Github ne se soucie pas de l'état de votre dépôt jusqu'à ce que vous le poussiez.

Publicité

Si vous venez de commettre une erreur lors de la validation des fichiers, vous pouvez effectuer une réinitialisation logicielle et effectuer une nouvelle validation. C'est en fait courant et utile si vous souhaitez fusionner plusieurs commits en un seul, appelé “squashing.” Si vous souhaitez annuler complètement les modifications, vous pouvez également le faire (avec une réinitialisation matérielle).

Si vous n'avez pas encore poussé vers Github, vous pouvez rétablir le commit le plus récent avec une réinitialisation logicielle, qui n'affecte pas du tout vos fichiers locaux, mais fait en sorte que vous n'ayez jamais validé les modifications sur Git dans la première place.

git reset –soft HEAD~

Si vous souhaitez simplement ajouter un nouveau fichier/modification au commit le plus récent, Git a un indicateur intégré pour faire exactement cela :

git commit –amend –no-edit

Retour (Github Safe)

Si vous souhaitez annuler les modifications d'un commit que vous avez déjà poussé vers Github, le moyen le plus sûr de le faire est d'effectuer un retour. L'annulation générera un “commit opposé,” qui annulera essentiellement toutes les modifications d'un commit spécifique. Si vous avez ajouté une ligne, elle est supprimée, et si vous avez supprimé un fichier, il est rajouté.

C'est sûr car cela ne change pas l'historique, seulement ajoute une nouvelle histoire en plus. Vous pouvez envoyer le commit de retour à Github et demander à vos collègues d'exécuter git pull pour obtenir les mises à jour.

Tout d'abord, exécutez git log pour obtenir une liste des commits :

Ensuite, copiez le hachage SHA1 et annulez le commit :

git revert 62ff517cc7c358eaf0bffdebbbe1b38dea92ba0f

Force Reset (Unsafe)

Si vous voulez vraiment supprimer un commit, la méthode pour ce faire, supprimez-le localement, puis forcez le push vers Github. Comme c'est très dangereuxet peut gâcher les référentiels locaux de vos collègues, si vous le souhaitez toujours, vous devrez peut-être désactiver la protection forcée de la branche push dans les paramètres du référentiel Github :

Publicité

Ensuite, vous pouvez supprimer le commit localement, ce qui est plus simple s'il s'agit du dernier commit :

git réinitialiser –soft HEAD~

Vous pouvez également effectuer une rebase interactive, ce qui est utile si le commit n'est pas le plus récent. Si le commit était, par exemple, il y a 12 commits, vous pouvez rebaser à partir de là, supprimer le commit incriminé et sauvegarder.

git rebase -i HEAD~12

Une fois que votre dépôt local est en ordre de marche, vous peut forcer le push vers Github.

git push origin master –force

Assurez-vous que votre référentiel est à jour ! Si la branche distante a des modifications que vous n'avez pas, ils seront écrasés par ce push.

Vous voudrez peut-être coordonner cela avec les membres de votre équipe, car vous devrez peut-être leur faire un ping et leur dire d'exécuter une récupération et de réinitialiser :

git fetch git reset origin/master –soft

Déplacement d'un commit vers une autre branche

Si vous vous êtes accidentellement engagé dans la mauvaise branche et que vous souhaitez supprimer le commit et déplacez-le dans la bonne branche, il existe des outils dans Git pour gérer cela. Vous pouvez lire notre guide sur le déplacement des commits pour en savoir plus, mais les mêmes principes s'appliquent & #8212; si vous devez supprimer complètement un commit, vous devez forcer la réinitialisation. Si vous êtes d'accord pour revenir en arrière, vous pouvez simplement revenir en arrière et choisir.