Attention : git reset --hard
SUPPRIMERA LES CHANGEMENTS DE VOTRE RÉPERTOIRE DE TRAVAIL . Veillez à cachez tous les changements locaux que vous voulez conserver avant d'exécuter cette commande.
En supposant que vous êtes assis sur ce commit, alors cette commande le supprimera...
git reset --hard HEAD~1
El HEAD~1
signifie l'engagement avant la tête.
Ou, vous pouvez regarder la sortie de git log
Trouvez l'identifiant du commit que vous voulez sauvegarder, et faites ceci :
git reset --hard <sha1-commit-id>
Si vous l'avez déjà poussé, vous devrez faire un forçage pour vous en débarrasser...
git push origin HEAD --force
Cependant si d'autres l'ont retiré, alors vous feriez mieux de commencer une nouvelle branche. Parce que lorsqu'ils tirent, cela va juste fusionner avec leur travail, et vous allez le pousser vers le haut à nouveau.
Si vous avez déjà poussé, il peut être préférable d'utiliser git revert
pour créer un commit "image miroir" qui annulera les changements. Cependant, les deux commits seront dans le journal.
POUR INFO git reset --hard HEAD
est idéal si vous voulez vous débarrasser des TRAVAUX EN COURS. Il vous ramènera au commit le plus récent, et effacera tous les changements dans votre arbre de travail et votre index.
Enfin, si vous avez besoin de trouver un commit que vous avez "supprimé", il est typiquement présent dans git reflog
sauf si vous avez fait un garbage collector de votre dépôt.
75 votes
Je pense que c'est pas un duplicata de Git annuler le dernier commit car il demande comment supprimer tout à partir d'une branche. Je pense aussi qu'aucune des réponses ne répond réellement à cette question. Elles rembobinent toutes les derniers commits, pas les
cherry-pick
ydelete
une seule livraison qui peut avoir eu lieu il y a un certain temps.25 votes
@Chris, la réponse avec
git rebase -i HEAD~10
répond à la question, car il vous permet de choisir arbitrairement les commits à supprimer. Git applique les commits dans la plage que vous spécifiez un par un, en ignorant les commits que vous avez supprimés du journal. J'ai utilisé cette commande aujourd'hui pour me débarrasser des deuxième et troisième commits les plus récents de mon repo tout en conservant le premier. Je suis d'accord qu'aucune des autres réponses n'est satisfaisante.0 votes
@MST oui, j'aurais dû dire qu'aucune des options de la réponse acceptée ne répond à cette question, mais vous avez absolument raison - cette commande semble fonctionner.
6 votes
Je pense
git reset --soft HEAD~1
est exactement ce dont vous avez besoin. Dans ce cas, vous pouvez annuler le commit et sauvegarder votre travail.reset --hard
supprimera complètement l'engagement.0 votes
Commande : git log | head -n 1 | git revert