web-dev-qa-db-ja.com

Git Stashesはどこに保存されますか?

私はPhpStormを使用しており、最近大量の変更を隠しておきました。その後のある時点で、私のPCプロファイルが破損し、再構築する必要がありました。

新しいPCプロファイルを作成したので、PhpStormは隠された変更を表示しません。

それらを取り戻す方法はありますか?

11
Typhoon101

ドキュメントから、最新のものは./.git/refs/stashに保存され、古いものはreflogrefにあります。

余談ですが、git stashの定期的な使用を維持することは悪い習慣だとわかりました。通常、機能ブランチでは多くの小さなコミットを優先します。この方法では、隠しておく必要はほとんどなく、隠しておくことはほとんどありません。私は通常、数分間何かに触れなければならない場合にのみ隠しておき、何かを見終わったら適用します。

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

13
Paul

「git stash」によって隠された実際のデータ(つまり、作業ツリーの現在のバージョンと.git/indexの内容)は、2つのコミットツリーとして格納されます。

1つのコミットツリーには、作業ツリーの現在の状態のスナップショットが含まれています。ここには注意が必要なビットがあります。以下を参照してください。

もう1つのコミットツリーは、私が知っているように、stash時の.git/indexの内容のスナップショットを格納するために使用されます。私はこれを(まだ)深く調べていないため、一方が他方にどのように変換されるかを理解できません。

.git/refs/stashには、stashが作成したコミットツリーのハッシュ値が含まれています。

.git/logs/refs/stashには、.git/refs/stash内のスタッシュの前にあるスタッシュに関するreflogのようなメタデータのチャンクが含まれています。

.git/indexは、作業ツリー内の各ファイルに1つずつ、エントリーのリストを保持します。これらのエントリには、フルパスとファイル名、およびファイルシステムのメタデータとgit関連のメタデータの両方のファイルに関するキャッシュされたメタデータが含まれています。

「git add」は、ファイルのコピーをオブジェクトストアに追加し、そのファイルのステージングフラグを.git/indexに設定します。

「git stash」でコミットツリーを作成するには、「git add」で変更(編集)されているがまだステージングされていないファイルをオブジェクトストアに追加する必要があります。 「git stash」は、一時的なインデックスファイルを作成してこれを行います。

9
Steven J Owens

すべてが.git/refs/stashgit stashスタッシュを無期限に保存し、それらすべてをgit stash list

Stashをドロップまたはクリアすると、stashリストから削除されることに注意してください。ただし、適切なデータが含まれているノードが整理されていない可能性があります。

2
Shravan40