Git Stash Pop muss zusammengeführt werden, Index kann nicht aktualisiert werden

116

Ich kann meinen Vorrat nicht öffnen, weil ich einen Zweig zusammengeführt habe, der anscheinend mit meinem Vorrat in Konflikt steht, und jetzt kann mein Vorrat anscheinend nicht mehr gelöscht werden.

app.coffee: needs merge
unable to refresh index

Weiß jemand, wie man das löst?

FEST!

Es stellte sich heraus, dass das eigentliche Problem ein ungelöster Zusammenführungskonflikt aus der Zusammenführung war, NICHT, dass der Stash einen Zusammenführungskonflikt verursachen würde.

Lösung: Übernehmen Sie die in Konflikt stehende Datei.

RandallB
quelle
6
Es ist interessant, dass die akzeptierte Antwort komplex ist, während die eigentliche Lösung recht einfach ist: Sie müssen die in Konflikt stehende Datei nicht einmal festschreiben, sondern hinzufügen.
Javi V
3
Fügen Sie Ihre Antwort als Antwort nicht in die Frage ein.
Schwarz

Antworten:

67

Überprüfen Sie zuerst git status.
Wie das OP erwähnt,

Das eigentliche Problem war ein ungelöster Zusammenführungskonflikt aus der Zusammenführung, NICHT, dass der Stash einen Zusammenführungskonflikt verursachen würde.

Dort git statuswürde diese Datei als " both modified" erwähnt

Lösung: Übernehmen Sie die in Konflikt stehende Datei.


Sie können eine ähnliche Situation vor 4 Tagen zum Zeitpunkt des Schreibens dieser Antwort (13. März 2012) mit diesem Beitrag feststellen : " 'Pull ist nicht möglich, weil Sie nicht zusammengeführte Dateien haben' ":

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

Sie haben den Zusammenführungskonflikt behoben (die richtige Datei bearbeiten und festschreiben):
Siehe " Wie behebe ich Zusammenführungskonflikte in Git? "

Was der Autor des Blogposts tat, war:

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.

Dh die aktuelle Zusammenführung wird vollständig abgebrochen, so dass die git stash popAnwendung angewendet werden kann.
Siehe " Abbrechen einer Zusammenführung in Git ".

Das sind deine beiden Möglichkeiten.

VonC
quelle
1
Manchmal kommt es auch vor, dass wir uns in einer anderen Branche befinden. Zum Beispiel habe ich Zweig A und habe einige Änderungen vorgenommen und bin zu Zweig B gewechselt und habe Änderungen vorgenommen und sie festgeschrieben. Jetzt möchte ich zu Zweig A gehen, habe aber vergessen, auf A auszuchecken und zu versuchen, den Stash anzuwenden. In diesem Fall gibt es auch das gleiche Problem. Ich habe dieses Problem im obigen Fall konfrontiert.
Kapil Verma
Ich habe alles begangen, aber 'git bash pop' bringt diese Konflikte zurück. Ich verstehe nicht, warum ich mich sowieso festlegen muss, wenn ich keine Änderungen am aktuellen Bach vornehmen möchte. Ich möchte nur zum versteckten Zweig zurückkehren.
Philip Rego
@PhilipRego Git Bash Pop? oder Git Stash Pop? Versuchen Sie, den Stash zu überprüfen,
VonC
Sorry meinte 'git stash pop'. Ich habe den Vorrat bereits fallen lassen, aber ich werde es versuchen, wenn ich das nächste Mal dieses Problem habe. Vielen Dank
Philip Rego
14

Ich hatte dieses Problem, löste dann den Konflikt und legte fest, und wenn ich es git stash poperneut tat, stellte ich denselben Speicher wieder her (was denselben Konflikt verursachte :-().

Was ich tun musste (WARNUNG: Sichern Sie zuerst Ihren Vorrat), ist git stash drop, ihn loszuwerden.

knocte
quelle
4
Das hat gerade meinen Vorrat losgeworden. Ich wollte darauf zurückkommen.
Philip Rego
3
Dies ist die Antwort, die ich brauchte, aber für andere Leute, die dies sehen, werden Sie Ihre versteckten Änderungen verlieren. Dies ist hilfreich, wenn Sie Probleme mit dem ersten Stash haben, aber den ersten Stash wirklich loswerden möchten, um Ihre tieferen Stash-Änderungen der zweiten Ebene anzuwenden.
Corey Schnedl
8

Es ist viel einfacher als die akzeptierte Antwort. Du brauchst:

  1. Überprüfen git statusund nicht zusammengeführte Pfade darunter. Beheben Sie die Konflikte. Sie können diesen Schritt überspringen, wenn Sie es später lieber tun möchten.

  2. Fügen Sie alle diese Dateien unter nicht zusammengeführten Pfaden zum Indizieren hinzu git add <filename>.

  3. Jetzt tu es git stash pop. Wenn Sie Konflikte bekommen, müssen diese erneut gelöst werden.

ayushgp
quelle
6
Dies führt immer wieder zu demselben Konflikt.
NaN
7

So habe ich das Problem gelöst:

  • Git-Status (siehe eine Mischung aus Dateien aus einem früheren Stash, Pull, Stash Pop und fortgesetzter Arbeit.)
  • Git Stash (siehe das Problem der Zusammenführung von Anforderungen)
  • git hinzufügen. (Fügen Sie die Dateien hinzu, damit meine Arbeit meine zusammengeführten Dateien lokal auflöst.)
  • Git Stash (kein Fehler)
  • Git Pull (kein Fehler)
  • Git Stash Pop (kein Fehler und weiterarbeiten)
Adam
quelle
1
Vielen Dank ! das hilft mir.
Julien Baldy
1
Ausgezeichnet, git add .ohne sich zu verpflichten, behebt das Problem für mich.
Paul Carlton
5

Wenn jemand dieses Problem außerhalb einer Zusammenführung / eines Konflikts / einer Aktion hat, kann dies die Git-Sperrdatei für Ihr Projekt sein, die das Problem verursacht.

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
quelle
1
Ein bisschen Angst vor dem resetBefehl. Können Sie erklären, warum dies funktioniert?
SMBiggs
1

Ich habe festgestellt, dass die beste Lösung darin besteht, Ihr Lager zu verzweigen und anschließend eine Lösung zu finden.

git stash branch <branch-name>

Wenn Sie Ihren Vorrat löschen, verlieren Sie möglicherweise Ihre Änderungen und müssen zum Reflog zurückkehren.

Julian Tellez
quelle
1

Sie müssen app.coffeeder Inszenierung hinzufügen .

Tun Sie dies git add app.coffeeund dann können Sie Ihren Stash anwenden (nach diesem Commit und Push).

Edward Munch
quelle
0

Der Stash wurde bereits auf andere Dateien angewendet.

Es ist nur so, app.coffeedass Sie manuell zusammenführen müssen. Danach einfach rennen

Git zurücksetzen

um die Änderungen aufzuheben und weiter zu hacken.

Vinodagouda Patil
quelle
0

Ich hatte das gleiche Problem, weil ich einige Änderungen in meinem Entwicklungszweig vorgenommen habe und dann zum Profilzweig wechseln möchte. Also habe ich die Änderungen von versteckt

git stash

dann habe ich im Profilzweig auch einige Änderungen vorgenommen und möchte dann wieder auf die Entwicklung zurückkommen, so dass ich die Änderungen erneut speichern muss

 git stash

aber als ich komme, um Zweig zu entwickeln und versuchte, die Versteckänderungen durch zu git

git stash apply

Also bekam ich Fehler müssen zusammengeführt werden

Um dieses Problem zu lösen, muss ich zuerst die Stash-Liste von überprüfen

git stash list

Daher wird die Liste der Verstecke in meinem Fall angezeigt. Es gab 2 Verstecke. Der Name der Verstecke wird wie folgt angezeigt: Versteck @ {0}, Versteck @ {1}

Ich brauche Änderungen von stash @ {1}, wenn ich versuche, es mit diesem Befehl zu bekommen

git stash apply stash@{1}

So wurde Fehler zusammengeführt

Um dieses Problem zu beheben, überprüfen Sie jetzt den Status Ihrer Dateien

git status

Es gab also einen Fehler, dass "beide modifiziert" wurden, um diesen Lauf zu lösen

git add .

Es werden die fehlenden geänderten Dateien hinzugefügt. Überprüfen Sie nun erneut den Status

git status 

Jetzt gibt es also keinen Fehler. Jetzt kann Stash angewendet werden

git stash apply stash@{1}

Sie können diesen Vorgang für eine beliebige Anzahl von Stash-Dateien ausführen.

Mudassir Khan
quelle