Supprimer Git Stash Pop


133

J'ai fait une pop git stash et maintenant j'ai une tonne de conflits. J'avais commis tout mon code récent avant le git stash pop, alors y a-t-il un moyen de revenir au dernier commit et de se débarrasser de tous les conflits et de coder l' git stash popinjecté?


Voulez-vous toujours enregistrer le travail pop-up ou ne voulez-vous plus jamais le revoir?
jscs

1
Non, je ne veux pas du travail Popped. J'ai fait la cachette il y a 4 mois et je ne sais pas ce qu'il y a même là-dedans?
jdog

2
Vous souciez-vous des choses qui n'étaient pas engagées avant de les cacher?
Andrew Marshall

Ceux d'il y a 4 mois ou ceux d'aujourd'hui? Je veux ce que j'avais il y a une heure.
jdog

5
S'il y a des conflits lorsque vous git stashalors git ne supprimera pas la réserve de la liste. Donc, git reset --hard HEADne détruit pas le travail éclaté.
jwadsack

Réponses:


189

Cela a déjà été demandé et répondu sur stackoverflow (voir Comment rétablir le dépôt Git à un commit précédent? ), Mais la réponse simple est:

git reset --hard HEAD

Cela devrait régler votre problème. Notez que cela supprime toutes les modifications non validées du référentiel.

Notez qu'en cas de conflit, le cache est conservé. À partir des documents cachés :

L'application de l'état peut échouer avec des conflits; dans ce cas, il n'est pas supprimé de la liste de réserve. Vous devez résoudre les conflits à la main et appeler git stash dropmanuellement par la suite.


1
Cela rétablira votre dépôt local au dernier commit. Vous devriez pouvoir pousser tous vos commits (depuis le dernier push) sans problème. Si cela ne fonctionne pas, publiez les résultats à votre question précédente). Bonne chance.
MichaelMilom

28
Mais cela vous fera perdre votre réserve
K. Weber

19
@ K.Weber en cas git stash popde conflit, la réserve ne sera pas supprimée de la liste de réserves.
Daiwei

1
Je ne sais pas qui vote pour le `` en fait, vous ne perdrez pas votre réserve '', je viens de perdre la mienne
Anthony

4
Pas grand - chose d'une solution IMHO, car il indique que vous allez perdre les modifications UNCOMMITED.
Ivan P

4

La réinitialisation peut également être appelée sur des fichiers spécifiques:

git reset HEAD <filename>...

Cependant, vous ne pouvez pas réinitialiser un fichier. Mais vous pouvez annuler les modifications avec le paiement par la suite:

git checkout -- <filename>...

Votre cachette sera préservée, comme l'a souligné Luke dans la réponse de MichaelMilom.

Ceci est utile lorsque vous ne voulez pas perdre vos modifications locales non validées.


0

Si vous ne voulez plus jamais voir le travail dans la cachette pop-up, c'est aussi simple qu'une réinitialisation matérielle:

git reset --hard HEAD

Cela indique à git d'ignorer le fait que vous avez des modifications non validées dans votre répertoire de travail, et définit le répertoire de travail, la zone de préparation et se dirige vers le commit que vous spécifiez - dans ce cas, le HEAD existant, qui contient tout le travail que vous 'ai juste commis.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.