2016-11-17 6 views
5

Ich habe PhpStorm verwendet und vor kurzem eine Menge meiner Änderungen gespeichert. Irgendwann danach wurde mein PC-Profil korrupt und musste neu erstellt werden.Wo sind Git Stashes gespeichert?

Jetzt, da ich ein neues PC-Profil habe, zeigt PhpStorm meine verdeckten Änderungen nicht.

Gibt es einen Weg, wie ich sie zurückbekommen kann?

+2

Haben Sie sich die Dokumentation angesehen? Stash wird lokal in 'refs/stash' gespeichert. Hast du jemals jemand anderes auf deinem Computer versteckt gesehen? Ich denke nicht. Hast du jemals versucht, einen Vorrat zu schieben? Es ist nicht möglich. Wenn der Klon des lokalen Repositorys nicht mehr vorhanden ist, sind Ihre Speicherbereiche verschwunden. – DanFromGermany

+1

Das ist es. Ich habe die Dateien jetzt zurück. Vielen Dank – Typhoon101

Antwort

8

Von den Dokumenten ist die neueste in ./.git/refs/stash gespeichert, während ältere in der reflog dieser ref sind.

Nebenbei habe ich festgestellt, es ist eine schlechte Praxis, eine regelmäßige Verwendung von Git Stash zu halten. Im Allgemeinen bevorzugen viele kleine Commits in einem Feature-Zweig. Auf diese Weise müssen Sie selten verstauen und wenn Sie es tun, wird es sehr wenig als solches gespeichert. Ich verstecke mich im Allgemeinen nur, wenn ich etwas für ein paar Minuten berühren muss, und wende mich dann an, wenn ich fertig bin, etwas anzusehen.

https://git-scm.com/docs/git-stash

1

Alle sind in .git/refs/stash gespeichert. git stash speichert unbegrenzt Speicherplätze, und alle von ihnen werden von git stash list aufgeführt.

Bitte beachten Sie, dass das Löschen oder Löschen des Stash es aus der Stash-Liste entfernt, aber Sie möglicherweise noch nicht protokollierte Knoten mit den richtigen Daten herumliegen haben.

3

Die von "Git Stash" (d. H. Die aktuelle Version des Arbeitsbaums und den Inhalt von .git/index) gespeicherten Daten werden als zwei Commit-Bäume gespeichert.

Ein Commit-Tree enthält einen Snapshot des aktuellen Status des Arbeitsbaums. Es gibt einige knifflige Bits hier, siehe unten.

Der andere Commit-Baum, wurde mir gesagt, wird verwendet, um eine Momentaufnahme des Inhalts von .git/index zum Zeitpunkt des Verstecks ​​zu speichern. Ich habe das (noch) nicht tief genug untersucht, um zu verstehen, wie das eine in das andere übersetzt wird.

.git/refs/stash enthält den Hashwert für den Commit-Baum, den der Stash erstellt hat.

.git/logs/refs/stash enthält einen replogartigen Teil der Metadaten zu den Stashes vor dem in .git/refs/stash.

.git/index enthält eine Liste von Einträgen, einen für jede Datei im Arbeitsbaum. Diese Einträge enthalten den vollständigen Pfad und Dateinamen sowie zwischengespeicherte Metadaten über die Datei, sowohl Dateisystem-Metadaten als auch git-bezogene Metadaten.

"git add" fügt dem Objektspeicher eine Kopie einer Datei hinzu und legt das Staging-Flag für diese Datei in .git/index fest.

Für "git stash", um einen Commit-Baum zu erstellen, müssen Dateien, die geändert (bearbeitet), aber noch nicht mit "git add" bereitgestellt wurden, zum Objektspeicher hinzugefügt werden. "git stash" erstellt dazu eine temporäre Indexdatei.

Verwandte Themen