Comment supprimer le dernier n commit sur Github et localement?

J'essaie de supprimer les 2 derniers commits dans l'un de mes dépôts GitHub. J'ai essayé comme suggéré ici : git push-F origin HEAD^^: master. Il semble que cela fonctionne, les deux derniers commits sont supprimés.

Ensuite, je les ai supprimés de mon référentiel local avec git rebase - i HEAD~2. Je supprime les lignes que sont liées à ces commit, et vérifie avec git log qu'elles sont correctement supprimées.

Après cela, je fais quelques modifications dans mon référentiel local, fais un nouveau commit et pousser à GitHub. Le problème est que dans mon compte GitHub j'ai les deux précédents commit que j'ai essayé de supprimer.

Je pense que le problème est dans mon référentiel local parce que si je clone mon référentiel Github à mon local, et apporte quelques modifications ici quand je pousse un nouveau commit, ces anciens commits ne sont pas poussés vers GitHub.

Une idée?

77
demandé sur Community 2012-04-14 16:08:39

3 réponses

Pour supprimer les deux derniers commits localement, je suggère d'utiliser:

git reset --hard HEAD^^

Rebase est une opération complètement différente qui ne vous aidera pas ici.

129
répondu KL-7 2012-04-14 12:14:51

Si vous voulez supprimer les 2 (deux) derniers commits, il y a une commande facile pour le faire:

git reset --hard HEAD~2

Vous pouvez modifier le 2 pour n'importe quel nombre de dernières validations que vous souhaitez supprimer.

Et pour pousser ce changement à distance, vous devez faire un git push avec la force (-f) paramètre:

git push -f

Toutefois, je ne recommande pas faire tout git commande avec -f ou --hard options en question si il y a nouveaux commits sur la télécommande (Github) après ceci valide que vous souhaitez supprimer. Dans ce cas, utilisez toujours git revert.

43
répondu Dherik 2018-05-15 13:11:05

Ce qui suit fonctionne pour moi

git reset HEAD~n

Il supprime les derniers commits n du repo local, car HEAD^ n'en supprime qu'un seul. Si vous devez supprimer ces modifications de la télécommande, vous devrez peut-être forcer push car vous serez derrière la télécommande.

git push -f origin <branch>
14
répondu Sial01 2017-02-12 23:32:55