Je ne peux pas réappliquer le stash au répertoire de travail.
Petite histoire:
J'ai d'abord essayé de pousser quelques modifications validées, mais cela disait: "non, vous ne pouvez pas, tirez d'abord" ... OK alors, je vais extraire des choses de GitHub et ensuite pousser mes modifications. Quand j'ai essayé de tirer, il a dit que j'avais des modifications qui seraient écrasées et que je devais cacher mes modifications. OK, j'ai caché les changements ... j'ai fait l'extraction et j'ai poussé les changements validés. Mais maintenant, je ne peux pas restaurer les modifications non validées sur lesquelles je travaillais.
Voici l'erreur:
MyPath/File.cs already exists, no checkout
Could not restore untracked files from stash
Bien sûr, je ne comprends pas encore tous les concepts de git, ils me déroutent un peu ... peut-être que j'ai fait quelque chose de mal.
Ce serait formidable si quelqu'un pouvait m'aider à résoudre ce problème ... Cela fait plus d'une heure que je cherche sur Google et tout, et je n'ai pas encore trouvé de solution.
L'aide est très appréciée. Merci!
git stash
devrait aider à sauvegarder rapidement les modifications locales. La suppression manuelle d'un ensemble de fichiers pour le restaurer interrompt le flux. L'git stash branch
approche de l'autre réponse sonne mieux, mais reste beaucoup plus manuelle que souhaité.Le moyen le plus sûr et le plus simple serait probablement de ranger à nouveau les choses:
Ensuite, si vous êtes satisfait du résultat, vous pouvez appeler
pour supprimer votre réserve «sûre».
la source
apply
au lieu depop
.pop
c'est une combinaison deapply
etdrop
, mais ne le fera quedrop
si leapply
travail fonctionne sans conflits. Mais oui,apply
c'est généralement plus sûr.Comme mentionné par @bentolo, vous pouvez supprimer manuellement les fichiers dont il se plaint, changer de branche, puis les rajouter manuellement. Mais je préfère personnellement rester "dans git".
La meilleure façon de procéder est de convertir la réserve en branche. Une fois qu'il s'agit d'une branche, vous pouvez travailler normalement dans git en utilisant les techniques / outils normaux liés aux branches que vous connaissez et aimez. C'est en fait une technique générale utile pour travailler avec des stashes même si vous n'avez pas l'erreur répertoriée. Cela fonctionne bien car un stash est vraiment un commit sous les couvertures (voir PS).
Conversion d'une réserve en branche
Ce qui suit crée une branche basée sur le HEAD lorsque le stash a été créé et applique ensuite le stash (il ne le valide pas).
Travailler avec la "branche cachée"
Ce que vous faites ensuite dépend de la relation entre la cachette et où se trouve votre branche cible (que j'appellerai ORIGINALBRANCH).
Option 1 - Rebase stash branch normalement (beaucoup de changements depuis stash)
Si vous avez effectué de nombreux changements dans votre ORIGINALBRANCH, il vaut probablement mieux traiter STASHBRANCH comme n'importe quelle succursale locale. Validez vos modifications dans STASHBRANCH, rebasez-le sur ORIGINALBRANCH, puis passez à ORIGINALBRANCH et rebase / fusionnez les modifications STASHBRANCH dessus. S'il y a des conflits, gérez-les normalement (l'un des avantages de cette approche est que vous pouvez voir et résoudre les conflits).
Option 2 - Réinitialiser la branche d'origine pour qu'elle corresponde à la réserve (changements limités depuis la réserve)
Si vous venez de mettre en cache tout en conservant certaines modifications par étapes, puis que vous les avez validées, et que tout ce que vous voulez faire est d'obtenir les modifications supplémentaires qui n'ont pas été mises en scène lorsque vous avez stocké, vous pouvez effectuer les opérations suivantes. Il reviendra à votre branche et index d'origine sans changer votre copie de travail. Le résultat final sera vos modifications de réserve supplémentaires dans votre copie de travail.
Contexte
Les stashes sont des commits comme des branches / balises (pas des correctifs)
PS, il est tentant de penser à un stash comme un patch (tout comme il est tentant de penser à un commit comme un patch), mais un stash est en fait un commit contre le HEAD quand il a été créé. Lorsque vous appliquez / pop, vous faites quelque chose de similaire à la sélection dans votre branche actuelle. Gardez à l'esprit que les branches et les balises ne sont en réalité que des références à des commits, donc à bien des égards, les stashes, les branches et les balises ne sont que des façons différentes de pointer vers un commit (et son historique).
Parfois nécessaire même lorsque vous n'avez pas apporté de modifications au répertoire de travail
PPS, Vous pouvez avoir besoin de cette technique après avoir simplement utilisé stash avec --patch et / ou --include-untracked. Même sans modifier les répertoires de travail, ces options peuvent parfois créer une réserve que vous ne pouvez pas simplement réappliquer. Je dois admettre que je ne comprends pas entièrement pourquoi. Voir http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.html pour une discussion.
la source
git stash show -p
- être y contribue-t-il à faire de la cachette -> * patch *.La solution: vous devez supprimer le fichier en question, puis essayer à nouveau de cacher pop / apply et il devrait passer. Ne supprimez pas d'autres fichiers, uniquement ceux mentionnés par l'erreur.
Le problème: Git craint parfois. Lors de son exécution,
git stash -u
il inclut des fichiers non suivis (cool!) Mais il ne supprime pas ces fichiers non suivis et ne sait pas comment appliquer les fichiers non suivis cachés au-dessus des restes (pas cool!), Ce qui rend vraiment l'-u
option assez inutile.la source
git stash -u
git stash show
. Cette réponse a fait allumer l'ampoule.Pour appliquer les différences de code dans la réserve sous forme de correctif, utilisez la commande suivante:
la source
git stash show --patch
ne contient pas les fichiers non suivis.Cela m'est arrivé de nombreuses fois, je cache les fichiers non suivis avec
git stash -u
lesquels finissent par être ajoutés au dépôt et je ne peux plus appliquer les modifications cachées.Je n'ai pas trouvé de moyen de forcer
git stash pop/apply
le remplacement des fichiers, alors je supprime d'abord les copies locales des fichiers non suivis qui ont été cachés (faites attention car cela supprimera toutes les modifications qui n'ont pas été validées ), puis j'applique les modifications cachées :Enfin, je l' utilise
git status
,git diff
et d' autres outils pour vérifier et Réintégration parties des fichiers supprimés s'il y a quelque chose qui manque.Si vous avez des modifications non validées que vous souhaitez conserver, vous pouvez d'abord créer une validation temporaire:
Utilisez les outils qui vous conviennent pour fusionner les modifications précédemment validées dans les fichiers locaux et supprimer la validation factice:
la source
Mon opération pop également bloquée était parce que les restes étaient ignorés fichiers restaient (voir le fichier .gitignore). Le statut Git m'a montré suivi et non suivi, mais mes activités n'ont pas nettoyé les fichiers ignorés.
Détails: j'avais utilisé
git stash save -a
, extrait le master pour compiler et voir le comportement d'origine, puis essayé de tout remettre pour continuer l'édition. Lorsque j'ai extrait ma branche et essayé de faire apparaître, mes fichiers ignorés étaient toujours là avant la sauvegarde de la réserve. En effet, l'extraction du maître n'a affecté que les fichiers validés - elle n'a pas effacé les fichiers ignorés. Donc, le pop a échoué, disant essentiellement qu'il ne voulait pas restaurer mes fichiers ignorés cachés au-dessus des fichiers qui étaient toujours là. Il est malheureux que je n'ai pas trouvé un moyen de démarrer une session de fusion avec eux.En fin de compte, j'avais l'habitude
git clean -f -d -x
de supprimer les fichiers ignorés. Fait intéressant, sur mes ~ 30, 4 fichiers restaient encore après le nettoyage (enterrés dans des sous-répertoires). Je vais devoir déterminer dans quelle catégorie ils appartiennent, qu'ils ont dû être supprimés manuellement.Puis mon pop a réussi.
la source
Essaye ça:
git checkout stash -.
la source
Autre solution:
la source
Avec Git 2.14.x / 2.15 (Q3 2017), la solution de qwertzguy de 2014 ne sera plus nécessaire.
Avant le troisième trimestre 2017, vous deviez supprimer le fichier en question, puis réessayer de cacher pop / apply.
Avec la prochaine version de Git, vous n'aurez plus à faire cela.
Voir commit bbffd87 (11 août 2017) de Nicolas Morey-Chaisemartin (
nmorey
) .(Fusionné par Junio C Hamano -
gitster
- in commit 0ca2f32 , 23 août 2017)la source
Le moyen le plus sûr de suivre le stockage
git stash -u
Cela cachera tout, y compris les changements non mis en scène
git stash drop
une fois que vous avez fini de travailler dessus, pour supprimer votre réserve "sûre".
la source