Ich habe meine Änderungen gestasht. Jetzt möchte ich nur einige Dateien aus dem Stash unstashen. Wie kann ich das machen?
Antworten
Zu viele Anzeigen?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.
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.
- See previous answers
- Weitere Antworten anzeigen