Suche…
Syntax
-
git stash list [<options>]
-
git stash show [<stash>]
-
git stash drop [-q|--quiet] [<stash>]
-
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-
git stash branch <branchname> [<stash>]
-
git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
-
git stash clear
-
git stash create [<message>]
-
git stash store [-m|--message <message>] [-q|--quiet] <commit>
Parameter
Parameter | Einzelheiten |
---|---|
Show | Zeigen Sie die im Stash aufgezeichneten Änderungen als Differenz zwischen dem abgelegten Zustand und dem ursprünglichen übergeordneten Element an. Wenn kein <Stash> angegeben ist, wird der letzte angezeigt. |
Liste | Listen Sie Ihre aktuellen Lagerbestände auf. Jeder Stash wird mit seinem Namen aufgelistet (z. B. Stash @ {0} ist der letzte Stash, Stash @ {1} der Vorgänger usw.), der Name des Zweigs, der zum Zeitpunkt des Stash aktuell war, und ein Kurzname Beschreibung des Commits, auf dem der Stash basiert. |
Pop | Entfernen Sie einen einzelnen überlagerten Status aus der Stash-Liste und wenden Sie ihn auf den aktuellen Status der Arbeitsstruktur an. |
sich bewerben | Wie pop , aber entfernen Sie den Status nicht aus der Stash-Liste. |
klar | Entfernen Sie alle abgelegten Zustände. Beachten Sie, dass diese Zustände dann beschnitten werden und möglicherweise nicht wiederhergestellt werden können. |
fallen | Entfernen Sie einen einzelnen verstauten Zustand aus der Stash-Liste. Wenn kein <Stash> angegeben ist, wird der letzte entfernt. dh stash @ {0}, andernfalls muss <stash> eine gültige stash-Protokollreferenz des Formulars stash @ {<revision>} sein. |
erstellen | Erstellen Sie einen Stash (der ein reguläres Commit-Objekt ist) und geben Sie den Objektnamen zurück, ohne ihn irgendwo im ref-Namespace zu speichern. Dies soll für Skripte nützlich sein. Es ist wahrscheinlich nicht der Befehl, den Sie verwenden möchten. Siehe "Speichern" oben. |
Geschäft | Speichern Sie einen bestimmten Stash, der mit git stash create erstellt wurde (was ein unbestimmtes Merge-Commit ist) im Stash ref, und aktualisieren Sie den Stash-Refflog. Dies soll für Skripte nützlich sein. Es ist wahrscheinlich nicht der Befehl, den Sie verwenden möchten. Siehe "Speichern" oben. |
Bemerkungen
Stashing ermöglicht uns ein sauberes Arbeitsverzeichnis, ohne dass Informationen verloren gehen. Dann ist es möglich, an etwas anderem zu arbeiten und / oder Zweige zu wechseln.
Was ist Verstauen?
Wenn Sie an einem Projekt arbeiten, befinden Sie sich möglicherweise auf halbem Weg in einer Feature-Zweig-Änderung, wenn ein Fehler beim Master auftritt. Sie sind nicht bereit, Ihren Code festzuschreiben, aber Sie möchten auch Ihre Änderungen nicht verlieren. Hier ist git stash
praktisch.
Führen Sie den git status
in einem Zweig aus, um Ihre nicht festgeschriebenen Änderungen anzuzeigen:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Führen Sie dann git stash
, um diese Änderungen in einem Stapel zu speichern:
(master) $ git stash
Saved working directory and index state WIP on master:
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch
Wenn Sie Dateien zu Ihrem Arbeitsverzeichnis hinzugefügt haben, können diese ebenfalls gespeichert werden. Sie müssen sie nur zuerst inszenieren.
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
NewPhoto.c
nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $
Ihr Arbeitsverzeichnis enthält jetzt keine Änderungen, die Sie vorgenommen haben. Sie können dies durch erneutes Ausführen des git status
:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Um den letzten Stash git stash apply
, müssen Sie den letzten git stash pop
mit git stash pop
anwenden und entfernen.
(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Beachten Sie jedoch, dass das Verstecken sich nicht an den Zweig erinnert, an dem Sie gearbeitet haben. In den obigen Beispielen lag der Benutzer bei master . Wenn sie zum dev- Zweig wechseln, dev und run git stash apply
der letzte Stash auf den dev- Zweig gelegt.
(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
Versteck schaffen
Speichern Sie den aktuellen Status des Arbeitsverzeichnisses und des Index (auch als Bereitstellungsbereich bezeichnet) in einem Stapel von Stashes.
git stash
Um alle nicht protokollierten Dateien in den Stash aufzunehmen, verwenden Sie die --include-untracked
oder -u
.
git stash --include-untracked
Um eine Nachricht in Ihren Vorrat aufzunehmen, um sie später leichter identifizierbar zu machen
git stash save "<whatever message>"
Um den Staging-Bereich nach dem --keep-index
im aktuellen Status zu --keep-index
verwenden Sie die --keep-index
oder -k
.
git stash --keep-index
Liste der gespeicherten Stashes
git stash list
Dadurch werden alle Stapel im Stapel in umgekehrter chronologischer Reihenfolge aufgeführt.
Sie erhalten eine Liste, die ungefähr so aussieht:
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Sie können sich auf einen bestimmten Stash beziehen, z. B. auf stash@{1}
.
Versteck anzeigen
Zeigt die Änderungen an, die im letzten Speicher gespeichert wurden
git stash show
Oder ein bestimmtes Versteck
git stash show stash@{n}
Um den Inhalt der Änderungen anzuzeigen, die für den jeweiligen Bestand gespeichert wurden
git stash show -p stash@{n}
Versteck entfernen
Entfernen Sie alle Vorräte
git stash clear
Entfernt den letzten Vorrat
git stash drop
Oder ein bestimmtes Versteck
git stash drop stash@{n}
Übernehmen und entfernen
Um den letzten Stash anzuwenden und aus dem Stapel zu entfernen, geben Sie Folgendes ein:
git stash pop
Um einen bestimmten Stash anzuwenden und ihn aus dem Stack zu entfernen, geben Sie Folgendes ein:
git stash pop stash@{n}
Übernehmen, ohne es zu entfernen
Wendet den letzten Stapel an, ohne ihn aus dem Stapel zu entfernen
git stash apply
Oder ein bestimmtes Versteck
git stash apply stash@{n}
Wiederherstellung früherer Änderungen aus dem Stash
Verwenden Sie, um den neuesten Stand nach dem Ausführen von Git-Stash zu erhalten
git stash apply
Um eine Liste Ihrer Vorräte anzuzeigen, verwenden Sie
git stash list
Sie erhalten eine Liste, die ungefähr so aussieht
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
Wählen Sie einen anderen Git-Stash zum Wiederherstellen mit der Nummer, die für den gewünschten Stash angezeigt wird
git stash apply stash@{2}
Teilweise Versteck
Wenn Sie nur einige Unterschiede in Ihrem Arbeitssatz ablegen möchten, können Sie einen Teileinsatz verwenden.
git stash -p
Und wählen Sie dann interaktiv aus, welche Teile Sie unterbringen möchten.
Ab Version 2.13.0 können Sie auch den interaktiven Modus vermeiden und mithilfe des neuen Push- Schlüsselworts einen Teilspeicher mit einer Pfadspezifikation erstellen.
git stash push -m "My partial stash" -- app.config
Übernehmen Sie einen Teil des Vorrats mit der Kasse
Sie haben einen Vorrat erstellt und möchten nur einige der Dateien in diesem Bestand prüfen.
git checkout stash@{0} -- myfile.txt
Interaktives Verstauen
Das Ablegen nimmt den fehlerhaften Zustand Ihres Arbeitsverzeichnisses - also Ihre geänderten, nachverfolgten Dateien und inszenierten Änderungen - und speichert es auf einem Stapel nicht abgeschlossener Änderungen, die Sie jederzeit erneut anwenden können.
Nur veränderte Dateien ablegen:
Angenommen, Sie möchten die bereitgestellten Dateien nicht stauen und nur die geänderten Dateien stauen, sodass Sie Folgendes verwenden können:
git stash --keep-index
Dadurch werden nur die geänderten Dateien gespeichert.
Nicht gespeicherte Dateien stauen:
Stash speichert niemals die nicht protokollierten Dateien, sondern nur die geänderten und bereitgestellten Dateien. Angenommen, Sie müssen auch die nicht aufgespürten Dateien stauen, dann können Sie Folgendes verwenden:
git stash -u
Dadurch werden die nicht protokollierten, bereitgestellten und geänderten Dateien erfasst.
Behalte nur bestimmte Änderungen:
Angenommen, Sie müssen nur einen Teil des Codes aus der Datei oder nur einige Dateien aus allen geänderten und gespeicherten Dateien verstauen. Dann können Sie dies folgendermaßen tun:
git stash --patch
Git speichert nicht alles, was geändert wurde, sondern fordert Sie interaktiv auf, welche der Änderungen Sie speichern möchten und welche Sie in Ihrem Arbeitsverzeichnis behalten möchten.
Verschieben Sie Ihre laufenden Arbeiten in einen anderen Zweig
Wenn Sie während der Arbeit feststellen, dass Sie sich in einem falschen Zweig befinden und noch keine Commits erstellt haben, können Sie Ihre Arbeit ganz einfach mithilfe von Stashing zur Korrektur des Zweigs verschieben:
git stash
git checkout correct-branch
git stash pop
Denken Sie daran, dass git stash pop
den letzten Stash anwendet und ihn aus der Stash-Liste löscht. Um den Vorrat in der Liste zu halten und nur für einen Zweig zu gelten, können Sie Folgendes verwenden:
git stash apply
Stelle einen heruntergefallenen Vorrat wieder her
Wenn Sie es gerade erst geknackt haben und das Terminal noch geöffnet ist, wird der Hash-Wert immer noch von git stash pop
auf dem Bildschirm gedruckt:
$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(Beachten Sie, dass Git-Stash-Drop auch dieselbe Linie erzeugt.)
Ansonsten können Sie es folgendermaßen finden:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
Daraufhin werden alle Commits an den Tipps Ihres Commit-Graphen angezeigt, auf die von keinem Zweig oder Tag mehr verwiesen wird. Jedes verlorene Commit, einschließlich jedes von Ihnen erstellten Stash-Commits, befindet sich irgendwo in diesem Diagramm.
Der einfachste Weg, das gewünschte Stash-Commit zu finden, besteht wahrscheinlich darin, diese Liste an gitk
zu gitk
:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
Dadurch wird ein Repository-Browser gestartet, der Ihnen jedes Commit im Repository zeigt , unabhängig davon, ob es erreichbar ist oder nicht.
Sie können gitk
dort durch etwas wie git log --graph --oneline --decorate
wenn Sie eine nette Grafik auf der Konsole einer separaten GUI-App vorziehen.
Suchen Sie nach Commit-Nachrichten in diesem Formular:
WIP on somebranch : commithash Eine alte Commit-Nachricht
Sobald Sie den Hash des gewünschten Commits kennen, können Sie ihn als Vorrat verwenden:
git stash apply $stash_hash
Oder Sie können das Kontextmenü in gitk
, um Verzweigungen für alle nicht erreichbaren Commits zu erstellen, an denen Sie interessiert sind. Danach können Sie mit all den üblichen Werkzeugen machen, was Sie möchten. Wenn Sie fertig sind, blasen Sie diese Äste einfach wieder weg.