Da es bei git im Wesentlichen um die Verwaltung des gesamten Repository- Inhalts und -Index (und nicht einer oder mehrerer Dateien) geht, git stash
handelt es sich nicht überraschend ummit dem gesamten Arbeitsverzeichnis.
Seit Git 2.13 (Q2 2017) können Sie einzelne Dateien mit git stash push
folgenden Elementen speichern :
git stash push [--] [<pathspec>...]
Wenn pathspec
' git stash push
' angegeben wird, zeichnet der neue Stash die geänderten Zustände nur für die Dateien auf, die der Pfadspezifikation entsprechen. Weitere Informationen finden Sie unter " Stash-Änderungen an bestimmten Dateien ".
Vereinfachtes Beispiel:
git stash push path/to/file
Der Testfall für diese Funktion zeigt einige weitere Optionen:
test_expect_success 'stash with multiple pathspec arguments' '
>foo &&
>bar &&
>extra &&
git add foo bar extra &&
git stash push -- foo bar &&
test_path_is_missing bar &&
test_path_is_missing foo &&
test_path_is_file extra &&
git stash pop &&
test_path_is_file foo &&
test_path_is_file bar &&
test_path_is_file extra
Bei der ursprünglichen Antwort (unten, Juni 2010) ging es darum, manuell auszuwählen, was Sie verstauen möchten.
Casebash- Kommentare:
Dies (die stash --patch
ursprüngliche Lösung) ist nett, aber oft habe ich viele Dateien geändert, so dass die Verwendung von Patches ärgerlich ist
bukzor ‚s Antwort (upvoted November 2011) schlägt vor , eine praktischere Lösung, basierend auf
git add
+git stash --keep-index
.
Gehen Sie und sehen Sie seine Antwort, die die offizielle sein sollte (anstelle meiner).
Zu dieser Option weist chhh in den Kommentaren auf einen alternativen Workflow hin:
Sie sollten git reset --soft
nach einem solchen Vorrat " " " " tun, um Ihre klare Inszenierung wiederherzustellen:
Um zum ursprünglichen Zustand zurückzukehren - der ein klarer Staging-Bereich ist und nur einige ausgewählte nicht inszenierte Modifikationen enthält, können Sie den Index sanft zurücksetzen, um ihn zu erhalten (ohne) etwas wie Sie zu begehen - bukzor - tat).
(Ursprüngliche Antwort Juni 2010: manuelle Aufbewahrung)
Dennoch git stash save --patch
konnte ermöglicht es Ihnen , die teilweise stashing erreichen Sie nach:
Mit --patch
können Sie interaktiv Hunks aus dem Diff zwischen HEAD und dem zu verstauenden Arbeitsbaum auswählen.
Der Stash-Eintrag ist so aufgebaut, dass sein Indexstatus mit dem Indexstatus Ihres Repositorys übereinstimmt und sein Arbeitsbaum nur die Änderungen enthält, die Sie interaktiv ausgewählt haben. Die ausgewählten Änderungen werden dann von Ihrem Arbeitsbaum zurückgesetzt.
Dadurch werden jedoch der vollständige Index (der möglicherweise nicht Ihren Wünschen entspricht, da er möglicherweise andere bereits indizierte Dateien enthält) und ein Teilarbeitsbaum (der möglicherweise so aussieht wie der, den Sie speichern möchten) gespeichert.
git stash --patch --no-keep-index
könnte besser passen.
Wenn --patch
dies nicht funktioniert, kann ein manueller Vorgang Folgendes bewirken:
Für eine oder mehrere Dateien wäre eine Zwischenlösung:
- kopiere sie außerhalb des Git-Repos
(Eigentlich schlägt eleotlecram eine interessante Alternative vor )
git stash
- kopiere sie zurück
git stash
# Dieses Mal werden nur die gewünschten Dateien gespeichert
git stash pop stash@{1}
# Wenden Sie alle Änderungen an Ihren Dateien erneut an
git checkout -- afile
# Setzen Sie die Datei vor lokalen Änderungen auf den HEAD-Inhalt zurück
Am Ende dieses ziemlich umständlichen Prozesses werden nur eine oder mehrere Dateien gespeichert.
git stash --keep-index
behält zwar den Index bei, versteckt aber alles - sowohl im Index als auch außerhalb.