web-dev-qa-db-fra.com

Où sont stockés les Stash Git?

J'utilisais PhpStorm et j'ai récemment stocké une charge de mes modifications. À un moment donné, mon profil PC a été corrompu et a dû être reconstruit. 

Maintenant que j'ai un nouveau profil PC, PhpStorm n'affiche pas mes modifications cachées.

Y a-t-il un moyen de les récupérer?

8
Typhoon101

Parmi les documents, le dernier est stocké dans ./.git/refs/stash alors que les anciens sont dans la reflog de cette ref

En passant, j’ai trouvé que c’était une mauvaise pratique de maintenir une utilisation régulière de git stash. Généralement, préférez de nombreux petits commits sur une branche. De cette façon, vous devez rarement vous cacher et lorsque vous le faites, il est très peu stocké en tant que tel. En général, je ne stocke que lorsque j'ai besoin de toucher quelque chose pendant quelques minutes, puis je pose ma candidature quand j'ai fini de regarder quelque chose. 

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

11
Paul

Les données réelles stockées dans "git stash" (c'est-à-dire la version actuelle de l'arbre de travail et le contenu de .git/index) sont stockées sous la forme de deux arbres de validation.

Un arbre de validation contient un instantané de l'état actuel de l'arbre de travail. Il y a quelques petites difficultés ici, voir ci-dessous.

On m'a dit que l'autre arbre de validation est utilisé pour stocker un instantané du contenu de .git/index au moment de la dissimulation. Je n'ai pas encore suffisamment étudié la question pour comprendre comment l'un se traduit dans l'autre.

.git/refs/stash contient la valeur de hachage de l’arbre de validation créé par la stash.

.git/logs/refs/stash contient un bloc de métadonnées ressemblant à celles de Reflog sur les stash précédant celui de .git/refs/stash.

.git/index contient une liste d'entrées, une pour chacun des fichiers de l'arborescence de travail. Ces entrées contiennent le chemin d'accès complet et le nom du fichier, ainsi que les métadonnées mises en cache du fichier, à la fois les métadonnées du système de fichiers et les métadonnées liées à git.

"git add" ajoute une copie d'un fichier à la librairie et définit l'indicateur de transfert pour ce fichier dans .git/index. 

Pour que "git stash" crée une arborescence de validation, les fichiers qui ont été modifiés (édités) mais pas encore traités avec "git add" doivent être ajoutés à la librairie. "git stash" fait cela en construisant un fichier d'index temporaire.

4
Steven J Owens

Tous sont stockés dans .git/refs/stash. git stash enregistre les caches indéfiniment et toutes sont répertoriées par git stash list.

Veuillez noter que le fait de supprimer ou d'effacer le contenu masqué le supprime de la liste, mais il se peut que des nœuds non encore définis contiennent les bonnes données.

1
Shravan40