J'ai caché quelques modifications locales avant de faire une fusion compliquée, j'ai fait la fusion, puis j'ai bêtement oublié de valider avant de courir git stash pop
. Le pop a créé quelques problèmes (mauvais appels de méthode dans une grande base de code) qui s'avèrent difficiles à localiser. J'ai couru git stash show
, donc je sais au moins quels fichiers ont été modifiés. Si rien d'autre, je suppose que c'est une leçon pour s'engager davantage.
Ma question: est-il possible d'annuler le stash pop sans annuler également la fusion?
git stash pop
sans vous engager au préalable. Qu'avez-vous fait pour y parvenir?git stash pop
après avoir organisé les changements (je ne me suis pas engagé cependant) avec la version 2.25.0.windows.1 de gitstash pop/apply
avant d'effectuer une validation, vous pouvez déclenchergit fsck --lost-found
. Cette commande itérera à travers les blobs pendantes (fichiers réels pour ceux qui ne sont pas familiers avec la terminologie git) qui ont été mis en scène mais qui ne sont validés nulle part (donc pendants), et les placent dans le répertoire .git / lost-found / , où vous pouvezgit show
les voir si ce sont les fichiers que vous recherchez.Réponses:
Essayez d'utiliser Comment récupérer une cachette abandonnée dans Git? pour trouver la cachette que vous avez sauté. Je pense qu'il y a toujours deux commits pour un stash, car il préserve l'index et la copie de travail (si souvent le commit d'index sera vide). Puis-
git show
les pour voir les différences et les utiliserpatch -R
pour les désappliquer.la source
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
(à partir du lien), et je viens de trouver manuellement le problème à partir de ce diff. Merci!git diff -p ${STACH_SHA1}~1 ${STASH_SHA1} | patch -R -p1
:; J'ai essayé avecgit show
comme suggéré mais sa sortie n'était pas bonne pour le patch; j'ai également dû fournir l'-p1
option de patcher afin de supprimer l' élémenta/..
etb/..
quigit diff
place les fichiers devant les fichiers, sinon cela ne résoudrait pas les chemins à partir de la racine du référentiel. SUGGESTION: soyez prudent et commettez le désordre dans une branche séparée avant de jouer avec le patch.stash pop
etstash push
déclenchera un commit qui enregistrerait les modifications dans l'index et le répertoire de travail, non?De
git stash --help
Cela m'a aidé mieux que la réponse acceptée avec le même scénario.
la source
Si votre fusion n'était pas trop compliquée, une autre option serait de:
Après cela, il ne vous reste plus que les modifications de la réserve que vous avez déposée trop tôt.
la source