git filter-branch を使用してリポジトリから誤ってファイルを削除してしまいました:
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch images/thumb/a.JPG' HEAD
どうすればこれを元に戻すことができますか? 出来ますか?つまり、ファイルは完全に削除されていますか?
git filter-branch を使用してリポジトリから誤ってファイルを削除してしまいました:
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch images/thumb/a.JPG' HEAD
どうすればこれを元に戻すことができますか? 出来ますか?つまり、ファイルは完全に削除されていますか?
を使用するgit filter-branch
と、バックアップ ファイルが に作成されます。
refs/original/refs/heads/master
コマンドをブランチで使用した場合master
。.git/refs
ディレクトリにバックアップがあるかどうかを確認できます。これを念頭に置いて、このバックアップを使用してファイルを回復できます。
git reset --hard refs/original/refs/heads/master
おそらく、元のマスターにハード リセットを行うよりも適切な方法は、によって書き換えられたすべてのgit filter-branch
参照を復元し、後でバックアップ参照を削除して、git filter-branch
なしで再度呼び出すことができるようにすること--force
です。
for orig_ref in $(git for-each-ref --format="%(refname)" refs/original/); do
git update-ref "${orig_ref#refs/original/}" $orig_ref
git update-ref -d $orig_ref # to also remove backup refs
done
それとその後:
git reset --hard master
これは(ほぼ間違いなく)シェルのforループなしで同じことを実行するもう少しgitっぽい方法です:
git for-each-ref --format="update %(refname:lstrip=2) %(objectname)" refs/original/ | git update-ref --stdin
git for-each-ref --format="delete %(refname) %(objectname)" refs/original/ | git update-ref --stdin
古いブランチのヒントがreflogに保存される可能性があります。その後、以前のすべての履歴で変更されていないコミットをチェックアウトできるはずです。