596 Stimmen

Wie kann man nur bestimmte Dateien aus dem Stash entfernen?

Ich habe meine Änderungen gestasht. Jetzt möchte ich nur einige Dateien aus dem Stash unstashen. Wie kann ich das machen?

706voto

VonC Punkte 1117238

Wie hier unten erwähnt und in "Wie extrahiere ich eine einzelne Datei (oder Änderungen an einer Datei) aus einem Git-Stash?" detailliert beschrieben, können Sie git checkout oder git show verwenden, um eine bestimmte Datei wiederherzustellen.

git checkout stash@{0} -- 

Ab Git 2.23+ (August 2019) verwenden Sie git restore, das den verwirrenden Befehl git checkout ersetzt:

git restore --source=stash@{0} -- 

Dies überschreibt die Datei filename: Stellen Sie sicher, dass Sie keine lokalen Änderungen vorgenommen haben, oder Sie möchten möglicherweise die gestashte Datei zusammenführen.

(Wie von Jaime M. kommentiert, in bestimmten Shells wie tcsh, in denen Sie die Sonderzeichen escapen müssen, wäre die Syntax: git checkout 'stash@{0}' -- )

oder um sie unter einem anderen Dateinamen zu speichern:

git show stash@{0}:  >  

(beachten Sie, dass hier der vollständige Dateipfad einer Datei relativ zum obersten Verzeichnis eines Projekts (denken Sie: relativ zu stash@{0}) ist.

yucer schlägt in den Kommentaren vor:

Wenn Sie manuell auswählen möchten, welche Änderungen Sie aus dieser Datei übernehmen möchten:

git difftool stash@{0}..HEAD -- 

Vivek fügt in den Kommentaren hinzu:

Es scheint, dass "git checkout stash@{0} -- " die Version der Datei wiederherstellt, die zum Zeitpunkt des Stashes durchgeführt wurde - es wendet NICHT die gestashten Änderungen für diese Datei an.
Um letzteres zu tun:

git diff stash@{0}^1 stash@{0} --  | git apply

(wie kommentiert von peterflynn, könnte in einigen Fällen | git apply -p1 erforderlich sein, um einen (p1) führenden Slash aus traditionellen Diff-Pfaden zu entfernen)


Wie kommentiert: "unstash" (git stash pop), dann:

  • fügen Sie das, was Sie behalten möchten, dem Index hinzu (git add)
  • stash den Rest: git stash --keep-index

Der letzte Punkt ermöglicht es Ihnen, einige Dateien zu behalten, während Sie andere staschen.
Es wird in "Wie stashe ich nur eine Datei aus mehreren Dateien, die sich geändert haben" veranschaulicht.

138voto

Balamurugan A Punkte 1786
git checkout stash@{N}  

Zum Beispiel: Um nur die Datei ./test.c und den Ordner ./include aus dem letzten verwahrten Bereich wiederherzustellen,

git checkout stash@{0} ./test.c ./include

49voto

Black Punkte 15156

Listen Sie zunächst alle Stashes auf

git stash list

stash@{0}: WIP bei Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{1}: WIP bei Produktkonfigurator: 132c06a5 Cursor bei glyphicon plus und close zu zeigende Hand ändern
stash@{2}: WIP bei master: 7e450c81 Merge branch 'Offlineseite'

Zeigen Sie dann an, welche Dateien im Stash enthalten sind (lassen Sie uns Stash 1 wählen):

git stash show 1 --name-only

//Hinweis: Sie können auch schreiben
//git stash show stash@{1} --name-only

 ajax/product.php
 ajax/productPrice.php
 errors/Company/js/offlineMain.phtml
 errors/Company/mage.php
 errors/Company/page.phtml
 js/konfigurator/konfigurator.js

Wenden Sie dann die gewünschte Datei an:

git checkout stash@{1} -- 

oder einen ganzen Ordner:

git checkout stash@{1} /errors

Es funktioniert auch ohne --, aber es wird empfohlen, sie zu verwenden. Siehe diesen Beitrag.

Es ist auch üblich, einen doppelten Bindestrich als Signal zu erkennen, um die Optionen zu stoppen und alle folgenden Argumente wörtlich zu behandeln.

41voto

Mike Monkiewicz Punkte 3991

Ich denke, die Antwort von VonC ist wahrscheinlich das, was du willst, aber hier ist eine Möglichkeit, selektives "git apply" durchzuführen:

git show stash@{0}:MyFile.txt > MyFile.txt

20voto

LachoTomov Punkte 2746

Noch eine Möglichkeit:

git diff stash@{N}^! -- Pfad/zur/Datei1 Pfad/zur/Datei2  | git apply -R

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X