Ich kann Stash nicht wieder auf das Arbeitsverzeichnis anwenden.
Kleine Geschichte:
Zuerst habe ich versucht, einige festgeschriebene Änderungen zu pushen, aber es hieß: "Nein, kannst du nicht, zieh zuerst" ... OK, dann werde ich Dinge von GitHub ziehen und dann meine Änderungen pushen. Als ich versuchte zu ziehen, hieß es, ich hätte Änderungen, die überschrieben würden, und ich sollte meine Änderungen aufbewahren. OK, ich habe die Änderungen versteckt ... habe den Pull ausgeführt und die festgeschriebenen Änderungen gepusht. Aber jetzt kann ich die nicht festgeschriebenen Änderungen, an denen ich gearbeitet habe, nicht wiederherstellen.
Dies ist der Fehler:
MyPath/File.cs already exists, no checkout
Could not restore untracked files from stash
Sicher verstehe ich noch nicht alle Konzepte von Git, sie verwirren mich ein bisschen ... vielleicht habe ich etwas falsch gemacht.
Es wäre großartig, wenn mir jemand bei der Lösung dieses Problems helfen könnte ... Ich habe seit mehr als einer Stunde nach Google und allem gesucht und bin noch nicht zu einer Lösung gekommen.
Hilfe wird sehr geschätzt. Vielen Dank!
git stash
sollte helfen, lokale Änderungen schnell zu sichern. Das manuelle Löschen einer Reihe von Dateien, um sie wiederherzustellen, unterbricht den Datenfluss. Dergit stash branch
Ansatz in der anderen Antwort klingt besser, aber immer noch viel manueller als gewünscht.Der sicherste und einfachste Weg wäre wahrscheinlich, die Dinge wieder zu verstauen:
Wenn Sie mit dem Ergebnis zufrieden sind, können Sie anschließend anrufen
um Ihren "sicheren" Vorrat zu entfernen.
quelle
apply
stattpop
.pop
ist eine Kombination vonapply
unddrop
, wird aber nur,drop
wenn dieapply
ohne Konflikte funktioniert. Aber ja,apply
ist normalerweise sicherer.Wie von @bentolo erwähnt, können Sie die beanstandeten Dateien manuell löschen, Zweige wechseln und sie dann manuell wieder hinzufügen. Aber ich persönlich bleibe lieber "in git".
Der beste Weg, dies zu tun, besteht darin, den Stash in einen Zweig umzuwandeln. Sobald es sich um einen Zweig handelt, können Sie mit den normalen Techniken / Werkzeugen, die Sie kennen und lieben, normal in Git arbeiten. Dies ist eine nützliche allgemeine Technik für die Arbeit mit Verstecken, auch wenn Sie den aufgeführten Fehler nicht haben. Es funktioniert gut, weil ein Stash wirklich ein Commit unter der Decke ist (siehe PS).
Konvertieren eines Stashs in einen Zweig
Im Folgenden wird ein Zweig basierend auf dem HEAD erstellt, als der Stash erstellt wurde, und dann wird der Stash angewendet (er schreibt ihn nicht fest).
Arbeiten mit dem "Stash Branch"
Was Sie als Nächstes tun, hängt von der Beziehung zwischen dem Stash und dem Ort ab, an dem sich Ihr Zielzweig (den ich ORIGINALBRANCH nennen werde) jetzt befindet.
Option 1 - Stash-Zweig normal neu starten (viele Änderungen seit Stash)
Wenn Sie viele Änderungen an Ihrem ORIGINALBRANCH vorgenommen haben, behandeln Sie STASHBRANCH wahrscheinlich am besten wie jede lokale Niederlassung. Übernehmen Sie Ihre Änderungen in STASHBRANCH, setzen Sie sie erneut auf ORIGINALBRANCH, wechseln Sie dann zu ORIGINALBRANCH und starten Sie die STASHBRANCH-Änderungen erneut. Wenn es Konflikte gibt, behandeln Sie diese normal (einer der Vorteile dieses Ansatzes besteht darin, dass Sie Konflikte sehen und lösen können).
Option 2 - Setzen Sie den ursprünglichen Zweig zurück, um ihn an den Stash anzupassen (begrenzte Änderungen seit dem Stash).
Wenn Sie nur etwas gespeichert haben, während Sie einige bereitgestellte Änderungen beibehalten haben, dann festgeschrieben, und alles, was Sie tun möchten, ist, die zusätzlichen Änderungen zu erhalten, die beim Speichern nicht bereitgestellt wurden. Sie können Folgendes tun. Es wird zu Ihrem ursprünglichen Zweig und Index zurückgeschaltet, ohne dass Ihre Arbeitskopie geändert wird. Das Endergebnis sind Ihre zusätzlichen Änderungen in Ihrer Arbeitskopie.
Hintergrund
Stashes sind Commits wie Zweige / Tags (keine Patches)
PS: Es ist verlockend, sich einen Stash als Patch vorzustellen (genau wie es verlockend ist, sich ein Commit als Patch vorzustellen), aber ein Stash ist tatsächlich ein Commit gegen den HEAD, als es erstellt wurde. Wenn Sie sich bewerben / popen, tun Sie etwas Ähnliches wie das Kirschpflücken in Ihrem aktuellen Zweig. Beachten Sie, dass Zweige und Tags eigentlich nur Verweise auf Commits sind. In vielerlei Hinsicht sind Stashes, Zweige und Tags nur verschiedene Arten, auf ein Commit (und seinen Verlauf) zu verweisen.
Wird manchmal benötigt, auch wenn Sie keine Änderungen am Arbeitsverzeichnis vorgenommen haben
PPS, Möglicherweise benötigen Sie diese Technik, nachdem Sie nur stash mit --patch und / oder --include-untracked verwendet haben. Selbst ohne die Arbeitsverzeichnisse zu ändern, können diese Optionen manchmal einen Stash erstellen, den Sie nicht einfach zurück anwenden können. Ich muss zugeben, ich verstehe nicht ganz warum. Weitere Informationen finden Sie unter http://git.661346.n2.nabble.com/stash-refuses-to-pop-td7453780.html .
quelle
git stash show -p
hilft es dort, Stash zu machen -> * Patch *.Die Lösung: Sie müssen die betreffende Datei löschen und dann versuchen, Pop / Apply erneut zu speichern, und es sollte durchlaufen werden. Löschen Sie keine anderen Dateien, sondern nur die durch den Fehler genannten.
Das Problem: Git saugt manchmal. Bei der Ausführung
git stash -u
enthält es untracked Dateien (cool!) , Aber es nicht entfernen , diese untracked Dateien und nicht wissen , wie die verstaute untracked Dateien auf der Oberseite der Reste anwenden (nicht cool!), Das wirklich das macht-u
Option ziemlich nutzlos.quelle
git stash -u
git stash show
. Diese Antwort ließ die Glühbirne angehen.Verwenden Sie den folgenden Befehl, um die Codeunterschiede im Stash stattdessen als Patch anzuwenden:
quelle
git stash show --patch
nicht die nicht verfolgten Dateien enthält.Das ist mir schon oft passiert, ich habe nicht verfolgte Dateien mit
git stash -u
denen sie dem Repo hinzugefügt werden, und ich kann die versteckten Änderungen nicht mehr anwenden.Ich konnte keine Möglichkeit finden,
git stash pop/apply
das Ersetzen der Dateien zu erzwingen. Daher entferne ich zuerst die lokalen Kopien der nicht verfolgten Dateien, die gespeichert wurden ( seien Sie vorsichtig, da alle nicht festgeschriebenen Änderungen gelöscht werden ), und wende dann die gespeicherten Änderungen an ::Schließlich benutze ich
git status
,git diff
und andere Werkzeuge zu überprüfen und Teile von den gelöschten Dateien wieder hinzufügen , wenn es etwas fehlt.Wenn Sie nicht festgeschriebene Änderungen haben, die Sie beibehalten möchten, können Sie zuerst ein temporäres Festschreiben erstellen:
Verwenden Sie die für Sie geeigneten Tools, um die zuvor festgeschriebenen Änderungen wieder in den lokalen Dateien zusammenzuführen und das Dummy-Commit zu entfernen:
quelle
Meine ähnlich blockierte Pop-Operation war, weil übrig gebliebene ignorierte Dateien (siehe die .gitignore-Datei). Der Git-Status zeigte mir, dass ich verfolgt und nicht verfolgt wurde, aber meine Aktivitäten bereinigten die ignorierten Dateien nicht.
Details: Ich hatte
git stash save -a
den Master verwendet, um das ursprüngliche Verhalten zu kompilieren und zu sehen, und dann versucht, alles zurückzusetzen, um die Bearbeitung fortzusetzen. Als ich meinen Zweig auscheckte und versuchte zu platzen, waren meine ignorierten Dateien noch vor dem Speichern des Stashs vorhanden. Dies liegt daran, dass das Auschecken des Masters nur festgeschriebene Dateien betraf - die ignorierten Dateien wurden nicht gelöscht. Der Pop schlug also fehl und sagte im Wesentlichen, dass er meine versteckten ignorierten Dateien nicht zusätzlich zu den Dateien wiederherstellen wollte, die noch vorhanden waren. Es ist bedauerlich, dass ich keinen Weg gefunden habe, eine Zusammenführungssitzung mit ihnen zu starten.Letztendlich habe ich
git clean -f -d -x
die ignorierten Dateien entfernt. Interessanterweise blieben von meinen ~ 30 noch 4 Dateien nach der Bereinigung (in Unterverzeichnissen vergraben). Ich muss herausfinden, in welcher Kategorie sie sich befinden, dass sie manuell gelöscht werden mussten.Dann war mein Pop erfolgreich.
quelle
Versuche dies:
git checkout stash -.
quelle
Andere Lösung:
quelle
Mit Git 2.14.x / 2.15 (Q3 2017) wird die Lösung von qwertzguy aus dem Jahr 2014 nicht mehr benötigt.
Vor dem dritten Quartal 2017 mussten Sie die betreffende Datei löschen und dann erneut versuchen, Pop / Apply zu speichern.
Mit der nächsten Git-Version müssen Sie das nicht mehr tun.
Siehe Commit bbffd87 (11. August 2017) von Nicolas Morey-Chaisemartin (
nmorey
) .(Zusammengeführt von Junio C Hamano -
gitster
- in Commit 0ca2f32 , 23. August 2017)quelle
Der sicherste Weg, um dem Verstecken zu folgen
git stash -u
Dadurch werden alle Daten gespeichert, einschließlich nicht bereitgestellter Änderungen
Git Stash Drop
Nachdem Sie mit der Arbeit fertig sind, entfernen Sie Ihren "sicheren" Vorrat.
quelle