Git stash pop - doit être fusionné, impossible d'actualiser l'index

116

Je ne peux pas ouvrir ma réserve parce que j'ai fusionné une branche qui apparemment entre en conflit avec ma réserve et maintenant ma réserve est apparemment incapable de sortir.

app.coffee: needs merge
unable to refresh index

Quelqu'un sait comment résoudre ceci?

FIXÉ!

Il s'avère que le problème réel était un conflit de fusion non résolu à partir de la fusion, PAS que la cachette provoquerait un conflit de fusion.

Solution: validez le fichier en conflit.

RandallB
la source
6
Il est intéressant de noter que la réponse acceptée est complexe alors que la solution réelle est assez simple: vous n'avez même pas besoin de valider le fichier en conflit, mais de l'ajouter.
Javi V
3
Ajoutez votre réponse comme réponse et non dans la question.
Noir

Réponses:

67

Vérifiez d'abord git status.
Comme le mentionne le PO,

Le problème réel était un conflit de fusion non résolu à partir de la fusion, PAS que la cachette provoquerait un conflit de fusion.

C'est là git statusque mentionnerait ce fichier comme étant " both modified"

Solution: validez le fichier en conflit.


Vous pouvez trouver une situation similaire il y a 4 jours au moment de la rédaction de cette réponse (13 mars 2012) avec ce message: " 'Pull is not possible because you have unmerged files' ":

julita@yulys:~/GNOME/baobab/help/C$ git stash pop
help/C/scan-remote.page: needs merge
unable to refresh index

Ce que vous avez fait a été de corriger le conflit de fusion (éditer le bon fichier et le valider):
Voir « Comment résoudre les conflits de fusion dans Git? »

Ce que l'auteur de l'article de blog a fait est:

julita@yulys:~/GNOME/baobab/help/C$ git reset --hard origin/mallard-documentation
HEAD is now at ff2e1e2 Add more steps for optional information for scanning.

C'est-à-dire abandonner complètement la fusion en cours, ce qui permet git stash popd'appliquer le.
Voir " Annulation d'une fusion dans Git ".

Ce sont vos deux options.

VonC
la source
1
Parfois, il arrive aussi que nous soyons dans une autre branche. Par exemple, j'ai la branche A et j'ai apporté quelques modifications et je suis passé à la branche B, j'ai apporté des modifications et je les valide. Maintenant, je veux aller à la branche A mais j'ai oublié de vérifier sur A et d'essayer d'appliquer la réserve. Dans ce cas, cela donne également le même problème. J'ai été confronté à ce problème dans le cas ci-dessus.
Kapil Verma
J'ai tout commis mais 'git bash pop' ramène ces conflits. Je ne vois pas pourquoi je devrais quand même devoir m'engager quand je ne veux pas apporter de modifications au bach actuel. Je veux juste retourner à la branche cachée.
Philip Rego
@PhilipRego git bash pop? ou git stash pop? Essayez de récupérer le stash au lieu d'utiliser git stash: stackoverflow.com/a/16625128/6309
VonC
Désolé signifiait «git stash pop». J'ai déjà laissé tomber la cachette, mais j'essaierai cela la prochaine fois que j'aurai ce problème. Merci
Philip Rego
14

J'avais ce problème, puis je résolvais le conflit et je commettais, et git stash poprecommencer consistait à restaurer la même réserve (provoquant le même conflit :-().

Ce que j'avais à faire (ATTENTION: sauvegardez d'abord votre réserve) est de m'en git stash dropdébarrasser.

knocte
la source
4
Cela m'a débarrassé de ma réserve. Je voulais y revenir.
Philip Rego
3
C'est la réponse dont j'avais besoin, mais pour les autres personnes qui voient cela, vous perdrez vos modifications cachées. Ceci est utile si vous rencontrez des problèmes avec la première réserve, mais que vous voulez vraiment vous débarrasser de la première réserve pour appliquer vos modifications plus profondes de deuxième niveau.
Corey Schnedl
8

C'est beaucoup plus simple que la réponse acceptée. Tu dois:

  1. Vérifiez git statuset non fusionné les chemins en dessous. Corrigez les conflits. Vous pouvez ignorer cette étape si vous préférez la faire plus tard.

  2. Ajoutez tous ces fichiers sous des chemins non fusionnés à indexer à l'aide de git add <filename>.

  3. Maintenant fais git stash pop. Si vous rencontrez des conflits, ceux-ci devront à nouveau être résolus.

ayushgp
la source
6
Cela conduit encore et encore au même conflit.
NaN
7

Voici comment j'ai résolu le problème:

  • git status (voir un mélange de fichiers d'une précédente stash, pull, stash pop et travail continu.)
  • git stash (voir le problème de la fusion des besoins)
  • git add. (ajoutez les fichiers pour que mon travail résout localement le mien fusionné)
  • git stash (pas d'erreur)
  • git pull (pas d'erreur)
  • git stash pop (pas d'erreur et continuez à travailler)
Adam
la source
1
THX ! cela m'aide.
Julien Baldy
1
Excellent, git add .sans engagement résout le problème pour moi.
Paul Carlton le
5

Si quelqu'un rencontre ce problème en dehors d'une fusion / conflit / action, il se peut que ce soit le fichier git lock de votre projet à l'origine du problème.

git reset
     fatal: Unable to create '/PATH_TO_PROJECT/.git/index.lock': File exists.
rm -f /PATH_TO_PROJECT/.git/index.lock
git reset
git stash pop
StevieJayCee
la source
1
Un peu peur de la resetcommande. Pouvez-vous expliquer pourquoi cela fonctionnera?
SMBiggs
1

J'ai trouvé que la meilleure solution est de bifurquer votre réserve et de faire une résolution après.

git stash branch <branch-name>

si vous laissez tomber votre réserve, vous risquez de perdre vos modifications et vous devrez revenir au reflog.

Julian Tellez
la source
1

Vous devez ajouter app.coffeeà la mise en scène.

Faites git add app.coffeeet vous pourrez ensuite appliquer votre réserve (après cette validation et cette poussée).

edvard_munch
la source
0

Le cache a déjà été appliqué à d'autres fichiers.

C'est seulement app.coffeeque vous devez fusionner manuellement. Ensuite, courez

git reset

pour annuler les modifications et continuer à pirater.

Vinodagouda Patil
la source
0

J'étais confronté au même problème car j'ai fait quelques changements dans ma branche de développement et que je souhaite ensuite accéder à la branche de profil. donc j'ai caché les changements par

git stash

puis dans la branche de profil, j'ai également fait quelques modifications et je veux revenir au développement, je dois donc cacher les modifications à nouveau en

 git stash

mais quand je viens de développer une branche et que j'ai essayé de git les changements de cachette en

git stash apply

donc j'obtenais une erreur de fusion

pour résoudre ce problème, je dois d'abord vérifier la liste des réserves en

git stash list

donc il montre la liste des cachettes dans mon cas il y avait 2 cachettes que le nom des cachettes affiche comme cette cachette @ {0}, cachette @ {1}

J'ai besoin de modifications depuis stash @ {1} alors quand j'essaye de l'obtenir par cette commande

git stash apply stash@{1}

donc obtenir une erreur doit fusionner

alors maintenant, pour résoudre ce problème, vérifiez l'état de vos fichiers

git status

donc il donnait une erreur que "les deux modifiés" afin de résoudre cette course

git add .

il ajoutera les fichiers modifiés manquants maintenant vérifiez à nouveau l'état

git status 

alors maintenant il n'y a pas d'erreur maintenant peut appliquer le stash

git stash apply stash@{1}

vous pouvez effectuer ce processus pour n'importe quel nombre de fichiers cachés.

Mudassir Khan
la source