77

git filter-branch を使用してリポジトリから誤ってファイルを削除してしまいました:

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch images/thumb/a.JPG' HEAD

どうすればこれを元に戻すことができますか? 出来ますか?つまり、ファイルは完全に削除されていますか?

4

4 に答える 4

145

を使用するgit filter-branchと、バックアップ ファイルが に作成されます。

refs/original/refs/heads/master

コマンドをブランチで使用した場合master.git/refsディレクトリにバックアップがあるかどうかを確認できます。これを念頭に置いて、このバックアップを使用してファイルを回復できます。

git reset --hard refs/original/refs/heads/master
于 2013-01-27T04:52:09.923 に答える
32

おそらく、元のマスターにハード リセットを行うよりも適切な方法は、によって書き換えられたすべての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
于 2015-01-16T00:04:41.480 に答える
5

古いブランチのヒントがreflogに保存される可能性があります。その後、以前のすべての履歴で変更されていないコミットをチェックアウトできるはずです。

于 2013-01-26T22:50:22.770 に答える