J'essaye de supprimer les 2 derniers commits de l'un de mes référentiels GitHub. J'ai essayé comme suggéré ici : git push -f origin HEAD^^:master
. Il semble que cela fonctionne, car 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 liées à ces commits et vérifie git log
qu'elles sont correctement supprimées.
Après cela, j'apporte quelques modifications dans mon référentiel local, je fais un nouveau commit et je pousse sur GitHub. Le problème est que, dans mon compte GitHub, j'ai les deux précédents commits que j'ai essayé de supprimer.
Je pense que le problème est dans mon référentiel local, car si je clone mon référentiel Github dans mon référentiel local et que j'apporte des modifications ici, lorsque je pousse un nouveau commit, ces anciens commits ne sont pas poussés vers GitHub.
Une idée?
git reset --hard HEAD^4
ougit reset --hard HEAD~4
. Cependant, les choses peuvent devenir un peu compliquées si votre historique contient des fusions. Vous pouvez trouver plus d'informations sur la spécification des révisions dans la section correspondante ici .git reset --hard HEAD~7
, mais corrigez-moi si je me trompe.Si vous souhaitez supprimer les 2 (deux) derniers commits, il existe une commande simple pour le faire:
Vous pouvez modifier le
2
pour n'importe quel nombre de derniers validations que vous souhaitez supprimer.Et pour pousser ce changement vers remote, vous devez faire un
git push
avec le paramètre force (-f
):Cependant, je ne recommande pas de faire une
git
commande avec-f
ou des--hard
options impliquées s'il y a de nouveaux commits à distance (Github) après ces commits que vous souhaitez supprimer. Dans ce cas, utilisez toujoursgit revert
.la source
hard
commande, vous perdez ces deux validations. Si vous souhaitez enregistrer les modifications, créez undiff
fichier de ces validations avant d'appliquer la réinitialisation.git reset HEAD~5
(ne pas utiliserhard
). De cette façon, vous obtiendrez vos modifications dans un état par étapes (c'est-à-dire non validées). Pour moi, voyez cette réponse .Ce qui suit fonctionne pour moi
Il supprime les derniers
n
commits du dépôt local, commeHEAD^
n'en supprime qu'un seul. Si vous devez supprimer ces modifications de la télécommande, vous devrez peut-être forcer la poussée car vous serez derrière la télécommande.la source