web-dev-qa-db-ja.com

`.git / index`をローカルで復元する方法は?

誤って削除しました.git/index、それを回復する方法はありますか?完全に削除されます。まだ何もコミットしていません。

25
dyarbrough

インデックスファイルを再構築するには、次の2つのコマンドを試してください。

git reset         # re-scan the working directory
git add -u        # update the index
38
kenorb

git resetを使用すると、最後のチェックアウトの時点でインデックスを回復できます。それ以降に追加したコンテンツは引き続き追加され、リポジトリにありますが、パスとコンテンツの関連付けを記録した場所はインデックスのみでした。 git fsckで到達不能オブジェクトをlost'n'foundディレクトリにドロップすることができます (そのドキュメント を参照)。次に、おなじみの領域での最短ルートは、コンテンツをワークツリーに戻し、再度追加することです。 gitは内容を複製しませんが、インデックスエントリを復元します。

3
jthill

とにかく、それは不可能だと思います。gitを介してではありません(ごみ箱ディレクトリまたはファイルシステムが提供する回復手段を調べてみてください)。ただし、git addを実行するか、インデックスを必要とする何かを実行するとすぐに、新しいインデックスが取得されます。

git addedしたファイルを紛失した場合は、。/ git/objects(find .git/objects/ -type f |sed 's:\.git/objects/::; s:/::')を実行し、git cat-file -p $the_hashを使用して各ファイルの内容を確認し、1回失われたものを見つけたら、出力をファイルにリダイレクトします。

git addの場合、ファイル名エントリは.git/indexに移動し、ファイルの内容は.git/objects/に格納されます。Gitインデックスは、取得するツリーオブジェクトのファイル名エントリで構成されますcommitを使用すると作成されます。git ls-files --stage)を使用すると、インデックスを人間が読める形式で表示できます。

2
PSkocik