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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow