たとえば、Git リポジトリにいるとします。ファイルを削除し、その変更をコミットします。作業を続行し、さらにコミットをいくつか行います。すると、ファイルを削除した後に復元する必要があることに気が付きます。
を使用してファイルをチェックアウトできることはわかっていますgit checkout <commit> -- filename.txt
が、そのファイルがいつ削除されたかはわかりません。
- 特定のファイル名を削除したコミットを見つけるにはどうすればいいですか?
- そのファイルを作業コピーに復元するにはどうすればいいでしょうか?
ベストアンサー1
指定されたパスに影響を与えた最後のコミットを検索します。ファイルは HEAD コミットにないため、以前のコミットで削除されているはずです。
git rev-list -n 1 HEAD -- <file_path>
^
次に、キャレット ( ) 記号を使用して、前のコミットのバージョンをチェックアウトします。
git checkout <deleting_commit>^ -- <file_path>
$file
または、が問題のファイルである場合は、 1 つのコマンドで実行します。
git checkout $(git rev-list -n 1 HEAD -- "$file")^ -- "$file"
zsh を使用しており、EXTENDED_GLOB オプションが有効になっている場合、キャレット記号は機能しません。~1
代わりに を使用できます。
git checkout $(git rev-list -n 1 HEAD -- "$file")~1 -- "$file"