Git Stash Apply Version

513

Ich habe 2 Zweige: Master | Design

Während ich im Design arbeitete, machte ich einen Stash und wechselte zum Master, nahm einige Anpassungen vor. stash applyIch bin zurück zum Design gewechselt und habe nur meine Änderungen in der Designbranche verloren.

Ich hoffe, dass sich alle meine Arbeiten in einem Vorrat befinden, da ich diese nicht gelöscht oder entfernt habe.

Wenn ich eine Stash-Liste mache, erhalte ich 4 Ergebnisse:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Wenn ich es versuche, git stash apply f2c0c72erhalte ich eine Fehlermeldung:

fatal: Needed a single revision
f2c0c72: no valid stashed state found

Wie kann ich einen bestimmten Vorrat anwenden?

Lee
quelle
26
Beachten Sie, dass Sie jetzt (Q4 2016, Git 2.11) die Syntax git stash apply 0(anstelle von git stash apply stash@{0}) haben. Siehe meine Antwort hier .
VonC

Antworten:

838

Die Schlüssel in den Vorrat sind eigentlich die stash@{n}Gegenstände auf der linken Seite. Also versuche:

git stash apply stash@{0}

(Beachten Sie, dass Sie in einigen Muscheln "stash@{0}"wie zsh, fish und Powershell zitieren müssen).

Seit Version 2.11 ist es ziemlich einfach, Sie können die N-Stapelnummer anstelle von verwenden stash@{n}. Also jetzt anstatt zu verwenden:

git stash apply "stash@{n}"

Du kannst Tippen:

git stash apply n

So erhalten Sie eine Liste der Verstecke:

git stash list

In der Tat stash@{0}ist eine Revision in Git, zu der Sie wechseln können ... aber git stash apply ...sollte herausfinden, wie DTRT, um es auf Ihren aktuellen Standort anzuwenden.

araqnid
quelle
90
Nur eine Anmerkung, dass auf einigen Shells stash @ {n} in Anführungszeichen gesetzt werden muss.
Senjai
7
Ein weiterer Tipp: Sie können z. B. gitk stash@{0}die Änderungen anzeigen, die Sie in einem bestimmten Vorrat vorgenommen haben.
Antinom
11
zsh Benutzer müssen z. B.git stash apply "stash@{0}"
mynameistechno
7
stash@{n}ist der umständlichste Befehl zum Eingeben. Gibt es andere Verknüpfungen, als Ihren eigenen Alias ​​oder Ihre eigene Funktion zu erstellen?
Dylanthepiguy
2
git stash apply nist friedlich
Victor
241

Führen Sie Folgendes aus, um einen Stash anzuwenden und aus der Stash-Liste zu entfernen:

git stash pop stash@{n}

Führen Sie Folgendes aus, um einen Stash anzuwenden und im Stash-Cache zu behalten:

git stash apply stash@{n}
Dan Loewenherz
quelle
8
Das ist großartig, danke für die Unterscheidung zwischen den beiden Optionen. Ich habe das gerade ausprobiert und es scheint, dass, wenn Sie einen Stash von Zweig-A auf Zweig-B verschieben, der Stash immer noch im Stash-Cache verbleibt. Ich denke, das wäre so, dass Sie immer noch die Möglichkeit haben, den Stash zu einem späteren Zeitpunkt auf Branch-A anzuwenden. Hoffe wirklich, dass das Sinn machte. Praktisch!
Longda
42
Für PowerShell:git stash pop "stash@{n}"
ankitjaininfo
1
PowerShell ist glücklich mit nur geschweiften Klammern in Anführungszeichen / einfachen Anführungszeichen:git stash apply stash@"{n}"
m1kael
PowerShell akzeptiert auch git stash apply stash@`{n`}(beachten Sie die Backticks vor den geschweiften Klammern).
Ian Kemp
52

Seit Version 2.11 ist es ziemlich einfach, Sie können die N-Stapelnummer verwenden, anstatt zu sagen "stash@{n}". Also jetzt anstatt zu verwenden:

git stash apply "stash@{n}"

Du kannst Tippen:

git stash apply n

Zum Beispiel in Ihrer Liste:

stash@{0}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{1}: WIP on design: f2c0c72... Adjust Password Recover Email
stash@{2}: WIP on design: eb65635... Email Adjust
stash@{3}: WIP on design: eb65635... Email Adjust

Wenn Sie sich bewerben möchten, können stash@{1}Sie Folgendes eingeben:

git stash apply 1

Andernfalls können Sie es auch dann verwenden, wenn Sie seit 1.7.5.1 einige Änderungen in Ihrem Verzeichnis vorgenommen haben. Sie müssen jedoch sicher sein, dass der Stash Ihre Änderungen am Arbeitsverzeichnis nicht überschreibt, wenn dies der Fall ist:

error: Your local changes to the following files would be overwritten by merge:
        file
Please commit your changes or stash them before you merge.

In Versionen vor 1.7.5.1 wurde die Arbeit verweigert, wenn das Arbeitsverzeichnis geändert wurde.


Git Versionshinweise:

Der Benutzer muss immer "stash @ {$ N}" sagen, wenn er ein einzelnes Element an der Standardposition des Stashs benennt, dh in refs / stash umblättert. Der Befehl "git stash" hat gelernt, "git stash apply 4" als Abkürzung für "git stash apply stash @ {4}" zu akzeptieren.

git stash apply "wird verwendet, um die Arbeit zu verweigern, wenn sich der Arbeitsbaum geändert hat, auch wenn sich die Änderung nicht mit der Änderung überschneidet, die der Stash aufgezeichnet hat

Pau
quelle
41

Wenn man sich auf einem Windows-Computer und in PowerShell befindet, muss man das folgende Argument zitieren:

git stash apply "stash@{0}"

... oder um die Änderungen zu übernehmen und aus dem Vorrat zu entfernen:

git stash pop "stash@{0}"

Andernfalls wird ohne die Anführungszeichen möglicherweise folgende Fehlermeldung angezeigt:

fatal: mehrdeutiges Argument 'stash @': unbekannte Revision oder Pfad nicht im Arbeitsbaum.

jterry
quelle
Anscheinend müssen Sie dies auch tun, wenn Sie Fish Shell auch unter Mac OS X 10.11 verwenden.
lps
8
git stash list

Wählen Sie dann das anzuwendende Versteck aus und verwenden Sie nur die Nummer:

git stash apply 1
Panthari
quelle
2
Git Stash list 

In der Liste werden alle versteckten Elemente angezeigt, z. B.: Stash @ {0}:, stash @ {1} :, .., stash @ {n}:

Wählen Sie dann die Zahl n aus, die stash @ {n} bezeichnet:

git stash apply n 

for eg: git stash apply 1 will apply that particular stashed changes to the current branch
Harshavardhan Reddy.
quelle