gitのステージング(インデックス)領域の正体

https://engineering.mercari.com/blog/entry/2017-04-06-171430/
https://zenn.dev/kaityo256/articles/inside_the_index
gitのstaging(index)エリアの実体は、`.git/index`というファイル。
indexファイルには、git管理下全ての「ファイルパス」と「blogオブジェクトのハッシュ値」の一覧がバイナリ形式で保存されている。
`git ls-files --stage`コマンドで人間が見れる書式で表示ができる。(左から、ファイルモード(chmodのやつ)、ハッシュ値、ファイルパスの順に表示)
このようにステージング領域はコミットオブジェクトではないため、一度`git add`したファイルでもそれをコミットせずに`git checkout .`で取り消してしまうと、その情報は消滅してしまう。
一度ステージングされたファイルはblobオブジェクトとして`.git/objects/`のどこかには存在するのだが、それがどんなハッシュ値なのか、どんなファイル名・ファイルパスだったのかは消滅しているので、発見することは困難である。



https://zenn.dev/kazuwombat/articles/eced2915b6adff
`git fsck --lost-found`コマンドで、`git add`してコミットしなかったblobオブジェクトを取り出してくれるらしい。