Gitリポジトリで削除されたファイルの検索と復元
私がGitリポジトリにいるとします。あるファイルを削除し、その変更をコミットしました。作業を続け、さらにいくつかのコミットを行いました。そして、そのファイルを復元する必要があることに気づきました。
git checkout HEAD^ foo.bar`でファイルをチェックアウトできることはわかっていますが、そのファイルがいつ削除されたのかはよくわかりません。
1.与えられたファイル名を削除したコミットを見つけるには、どのような方法が一番早いでしょうか? 2.2. そのファイルを私の作業コピーに戻す最も簡単な方法は何でしょうか?
手動でログを参照して、SHAのプロジェクト全体をチェックアウトして、そのファイルを元のプロジェクトのチェックアウトに手動でコピーする必要がないことを望んでいます。
2703
3
指定されたパスに影響を与えた最後のコミットを検索します。このファイルは、HEADのコミットには含まれていないので、このコミットで削除されたものと思われます。
1.git log --diff-filter=D --summary
で、ファイルを削除したすべてのコミットと、削除されたファイルを取得します。 2.2.
git checkout $commit~1 path/to/file.ext` を使って、削除されたファイルを復元します。ここで、
$commit
はステップ1で見つけたコミットの値で、例えばe4cf499627
のようになります。もしあなたが正気でないなら、
git-bisect
を使ってください。以下はその方法です。さて、いよいよ自動テストを実行してみましょう。シェルコマンド
'[ -e foo.bar ]'
は、foo.bar
が存在すれば 0 を、そうでなければ 1 を返します。git-bisect` の "run" コマンドは、バイナリ検索を使用して、テストが失敗する最初のコミットを自動的に見つけます。指定された範囲(良いものから悪いものまで)の半分から始めて、指定されたテストの結果に基づいて半分にします。これで、このテストを削除したコミットに到達しました。ここから未来にジャンプして、
git-revert
で変更を元に戻すことができます。あるいは、1つ前のコミットに戻って手動でダメージを確認することもできます。