web-dev-qa-db-fra.com

Can't pop git stash, 'Vos modifications locales dans les fichiers suivants seraient écrasées par la fusion'

J'ai donc eu beaucoup de changements et quelques fichiers non suivis. J'avais besoin de modifier quelque chose, alors j'ai utilisé git stash -u, a modifié quelques éléments, a validé ces changements, les a poussés, puis a essayé de git stash pop.

Parce que j'avais modifié quelques fichiers que j'avais cachés, j'ai reçu le message suivant:

error: Your local changes to the following files would be overwritten by merge:
    file_1.py
    file_2.py
Please, commit your changes or stash them before you can merge.
Aborting

Cela semble étrange, j'avais commis toutes les nouvelles modifications, ma caisse était propre lorsque j'ai exécuté la commande.

Il semble que le git stash pop opération un-stashed la moitié de mes modifications et les fichiers non suivis, mais si j'essaie et git stash pop encore une fois, je reçois une sortie comme:

some_file.html already exists, no checkout
some_other_file.html already exists, no checkout
yet_another_file.html already exists, no checkout
Could not restore untracked files from stash

git stash show affiche toujours une liste de mes modifications cachées, mais je ne sais pas ce que je fais maintenant.

Comment puis-je me décoller?

49
fredley

J'ai contourné cela, je pense que cela devait être une sorte de bogue, car mon répertoire de travail était propre et à jour.

Iran git checkout . et après ça git stash apply a bien fonctionné, j'ai tout récupéré sans aucun problème. Je serais intéressé de découvrir ce qui a réellement provoqué son échec.

23
fredley

Pour ceux qui ( ont un travail non engagé et veulent faire apparaître leur cachette sans perdre ce travail, voici un moyen (avec merci à @iFreilicht):

  1. Modifiez temporairement les modifications non validées:

    git add -u .
    
  2. Maintenant, vous pouvez appliquer votre cachette sans se plaindre (espérons-le):

    git stash pop
    
  3. Maintenant décompressez tout, mais laissez les fichiers tels quels:

    git reset
    
63
joeytwiddle

La cachette créée avec -u doit nettoyer les fichiers non suivis avant d'être apply- éd (et pop est juste apply + drop).

Par paranoïa générale, je ferais mv les fichiers non suivis dans un endroit sûr, puis git stash apply, vérifiez tout soigneusement et git stash drop une fois que je suis sûr que tout est correct. :-)

1
torek