2016-08-17 13 views
0

私は偶然リセットされた自分のリポジトリにgit reset --hardというファイルを持っています。ファイルはまだリポジトリにありますが、変更がコミットされていないので、私はそれにアクセスできません。Git:コミットされていない変更を元に戻して特定のファイルをリセットする

私はいくつかの関連する質問が見つかりました:私は唯一のいくつかの古い失われたものではなく、この最近のものを見つけたこれらとただし

を。 grepこの特定のファイルの履歴だけですか?

EDIT:紛失したファイルの内容を知っていると助けになることがあります。たぶんもし私がgrepぶら下がったブロブ/このコンテンツをコミットすることができますか?

+0

IDEを使用していますか?その場合は、ローカル履歴を確認するか、取り消しを試みます。 –

+0

残念ながら、これはリモートホスト上にありませんでした。 –

+0

リセットする前に 'git .add'しましたか?もしそうでなければ、私は復旧する方法がないと考えています –

答えて

0

Gitはオブジェクトをデータベースに格納します。

find .git/objects/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort 

あなたは日付でオブジェクトの一覧を取得する必要があります。各エントリーはシャーで終わります。各SHA(すなわちd670460b4b4aece5915caf5c68d12f560a9fe3e4)を取り、次のように入力します。

git show <the sha> 

あなたは正しいファイルを見つける前に、いくつかを試してみる必要があるかもしれません。そのうちの一つは、あなたの失われたファイルである必要があります -

私の答えは、あなたが

git fsck --full --cache --dangling 

を行うと、dangling blobエントリを検索することができますhttps://stackoverflow.com/a/7376959/4374801

0

から派生しています。

あなたは(私たちは念のために、参照されていないオブジェクトの大きなセットを選択ここでは)はgrepしようとすることができます:

git fsck --unreachable --no-reflogs --full 2>/dev/null | awk '$2 == "blob" {print $3}' | xargs git grep -a your-search-string 

それがマッチしたラインと一緒に見つかったブロブのSHA-1を出力します。

ハッシュを取得したら、git show <hash>を使用してファイルを確認してください。

関連する問題