1188 votes

Supprimer un commit git qui n'a pas été poussé

J'ai fait un git commit mais je ne l'ai pas encore poussé dans le dépôt. Donc quand je fais git status J'obtiens '# Votre branche est en avance sur 'master' de 1 commit.

Donc, si je veux revenir en arrière sur mon dernier commit, je peux juste faire :

git reset --hard eb27bf26dd18c5a34e0e82b929e0d74cfcaab316

étant donné que lorsque je fais git log J'ai compris :

commit eb27bf26dd18c5a34e0e82b929e0d74cfcaab316
Date:   Tue Sep 29 11:21:41 2009 -0700

commit db0c078d5286b837532ff5e276dcf91885df2296
Date:   Tue Sep 22 10:31:37 2009 -0700

10 votes

Cette question semble être un doublon d'une autre de vos propres questions : stackoverflow.com/questions/1338728/how-to-delete-a-git-commit

1 votes

1 votes

1353voto

Jeril Kuruvila Points 170

SI vous n'avez PAS poussé vos modifications à distance

git reset HEAD~1

Vérifiez si la copie de travail est propre en git status .

ELSE vous avez poussé vos changements à distance

git revert HEAD

Cette commande va inverser/supprimer les modifications locales et vous pourrez alors pousser

61 votes

Cela répond à "Supprimer le dernier commit git qui n'a pas été poussé" (réponse la plus proche IMHO).

48 votes

De plus, il conserve les changements locaux effectués dans le dernier commit, alors que git reset --hard ne le fait pas.

1 votes

Pour moi, il annulera le dernier commit poussé et le dernier commit non poussé

811voto

Brian Campbell Points 101107

En fait, lorsque vous utilisez git reset vous devez vous référer à l'engagement que vous réinitialisez. à ; vous voudriez donc que le db0c078 s'engager, probablement.

Une version plus simple serait git reset --hard HEAD^ pour revenir à la livraison précédente avant la tête actuelle ; de cette façon, vous n'avez pas à copier les ID de livraison.

Faites attention quand vous faites git reset --hard car vous pouvez perdre toutes les modifications non engagées que vous avez. Vous pouvez vérifier git status pour être sûr que votre copie de travail est propre, ou que vous voulez effacer les changements qui sont là.

En outre, au lieu de HEAD, vous pouvez utiliser origin/master comme référence, comme suggéré par @bdonlan dans les commentaires : git reset --hard origin/master

443 votes

Ou git reset --hard origin/master pour le remettre à l'endroit où se trouvait l'origine.

1 votes

Un autre pointeur utile que vous pouvez réinitialiser est ORIG_HEAD ou sa généralisation utilisant reflog HEAD@{1} (la dernière position de HEAD).

15 votes

Lecteur, avant que vous git reset votre code. Faites une faveur à votre futur vous : La différence entre reset , reset --soft et reset --hard (Qu'est-ce qui arrive à vos anciens git add alias "votre travail" :) Photo : enlace

246voto

Shadowbob Points 381
git reset --hard origin/main

Cela fonctionne pour d'autres branches :

git reset --hard origin/master
git reset --hard origin/staging

pour le remettre à l'endroit où se trouvait l'origine.

Ceci a été posté par @bdonlan dans la rubrique commentaires . J'ai ajouté cette réponse pour les personnes qui ne lisent pas les commentaires.

5 votes

Cette question a été posée il y a près de 5 ans, et elle figure déjà dans l'un des commentaires.

1 votes

Que faire si la branche locale actuelle diffère de master - devrais-je utiliser origin/mybranch alors ?

20 votes

Je n'ai pas l'habitude de lire les commentaires quand je suis pressé d'avoir une réponse... Merci de mettre comme réponse (une réponse simple qui fonctionne)

235voto

M. Massula Points 1512

Je pense que l'un d'entre eux répondra à vos besoins.

1 - Annuler le commit et garder tous les fichiers en attente : git reset --soft HEAD~

2 - Annuler le commit et déstocker tous les fichiers : git reset HEAD~

3 - Annuler le commit et supprimer complètement tous les changements : git reset --hard HEAD~

Voici où j'ai trouvé la réponse

114voto

papigee Points 824

Il y a deux branches à cette question (Revenir en arrière sur un commit ne signifie pas que je veux perdre toutes mes modifications locales) :

1. Pour revenir sur le dernier commit et ignorer les changements dans le fichier commit faire :

git reset --hard HEAD~1

2. Pour revenir sur le dernier commit mais conserver les modifications locales (sur disque) faire :

git reset --soft HEAD~1

Cette commande (la dernière) vous amènera à l'état dans lequel vous vous seriez trouvé si vous aviez fait le test. git add .

Si vous voulez déstocker les fichiers après cela, procédez comme suit

git reset

Vous pouvez maintenant apporter d'autres modifications avant d'ajouter et de valider à nouveau.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X