OK, je pense avoir réussi à trouver une méthode de travail qui vous permettra de revenir là où vous devez être (comme si vous n'aviez pas fait la pop).
FAITES UNE SAUVEGARDE AU PRÉALABLE ! Je ne sais pas si cela va fonctionner pour vous, alors copiez votre repo entier juste au cas où cela ne fonctionnerait pas.
1) Corriger les problèmes de fusion et régler tous les conflits en sélectionnant tous les changements qui proviennent du patch (dans tortoisemerge, cela apparaît comme un.REMOETE (leur)).
git mergetool
2) Valider ces changements (ils seront déjà ajoutés via la commande mergetool). Donnez-lui un message de commit de "merge" ou quelque chose dont vous vous souvenez.
git commit -m "merge"
3) Maintenant, vous aurez toujours vos changements locaux non indexés que vous avez commencé à l'origine, avec un nouveau commit du patch (nous pouvons nous débarrasser de cela plus tard). Maintenant, livrez vos changements non-stagés
git add .
git add -u .
git commit -m "local changes"
4) Inversez le patch. Ceci peut être fait avec la commande suivante :
git stash show -p | git apply -R
5) Valider ces changements :
git commit -a -m "reversed patch"
6) Se débarrasser des commits patch/unpatch
git rebase -i HEAD^^^
à partir de là, supprimez les deux lignes contenant 'merge' et 'reversed patch'.
7) Récupérez vos modifications non modifiées et annulez le commit "modifications locales".
git reset HEAD^
Je l'ai testé avec un exemple simple et il vous ramène à l'endroit où vous voulez être - juste avant que la réserve ne soit ouverte, avec vos changements locaux et avec la réserve toujours disponible pour l'ouverture.
0 votes
Quant à vos changements non engagés : ces changements étaient-ils déjà dans l'index ?
0 votes
Pouvez-vous afficher la version de git que vous utilisez ?
0 votes
Est-ce que git a divisé vos fichiers en
>>>>>
,=====
,<<<<<
pour les fusions ?3 votes
Voir aussi : git stash blunder : git stash pop and ended up with merge conflicts
0 votes
Informations pertinentes provenant du Question connexe : Si un conflit survient, la réserve n'est pas supprimée de la liste des réserves.
3 votes
La réponse acceptée semble compliquée. Je pense que c'est une bonne pratique générale de ne jamais faire quelque chose comme tenter
git stash pop
sur un lieu de travail malpropre. Dans ce cas, vous pouvez simplementgit reset --hard
et votre réserve est toujours intacte. (C'est plus ou moins ce que le sujet lié de @BradKoch suggère)0 votes
Duplicata possible de Annuler le pop de git stash qui résulte en un conflit de fusion
1 votes
@StevenLu, je suis d'accord, mais le problème peut se produire dans un répertoire de travail propre si vous cachez les changements afin de les déplacer vers une branche différente. La cachette entre en conflit avec les commits qui existent sur la nouvelle branche et qui n'existaient pas sur l'ancienne.
0 votes
@Casebash, cela fait longtemps que cette question n'a pas été posée, pourriez-vous envisager de revoir votre réponse acceptée ?
git
a suffisamment progressé au cours de la dernière décennie pour qu'une solution unique soit proposée dans cet article : stackoverflow.com/a/60444590/4271922 .0 votes
@KennSebesta : Je l'ai accepté pour le moment - je le testerai la prochaine fois que je rencontrerai ce problème.