1. ホーム
  2. git

[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法

2022-03-14 12:08:17

質問

Git リポジトリにいるとします。あるファイルを削除し、その変更をコミットしました。作業を続け、さらにいくつかのコミットを行いました。そして、そのファイルを復元する必要があることに気づきました。

を使用してファイルをチェックアウトできることは知っています。 git checkout HEAD^ foo.bar しかし、そのファイルがいつ削除されたのかがよくわからないのです。

  1. 指定されたファイル名を削除したコミットを見つける最も早い方法は何でしょうか?
  2. そのファイルを作業コピーに戻す最も簡単な方法は何でしょうか?

私は、手動でログを参照し、指定されたSHAについてプロジェクト全体をチェックアウトし、その後手動でそのファイルを私の元のプロジェクトのチェックアウトにコピーする必要がないことを望んでいます。

どのように解決するのですか?

指定されたパスに影響を与えた最後のコミットを検索します。そのファイルは HEAD コミットにないので、その前のコミットがそれを削除したに違いありません。

git rev-list -n 1 HEAD -- <file_path>

次に、前のコミットでのバージョンをチェックアウトし、キャレット( ^ )記号を使用します。

git checkout <deleting_commit>^ -- <file_path>

または1つのコマンドで、もし $file が該当するファイルです。

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"