存在しないファイルのテスト
前のステップでは、git ls-tree
と git log -- <file>
を使って、Git リポジトリに存在するファイルを調べることに成功しました。では、リポジトリの履歴に存在しないファイルにこれらのコマンドを適用した場合、どうなるか見てみましょう。
プロジェクトディレクトリにいることを確認してください。
cd ~/project/my-time-machine
まず、存在しないファイル(例えば nonexistent.txt
)に git ls-tree
を適用してみましょう。
git ls-tree HEAD nonexistent.txt
何も出力されないはずです。これは、git ls-tree
が指定されたツリー(この場合は HEAD
のツリー)に存在するエントリのみをリストするためです。nonexistent.txt
は最新のコミットのツリーに存在しないため、何も表示されません。
次に、同じ存在しないファイルに git log
を適用してみましょう。
git log -- nonexistent.txt
以下のような出力が表示されるはずです。
fatal: no such path 'nonexistent.txt' in HEAD
これは異なる動作です!git log -- <file>
は、履歴全体を通じて指定されたファイルパスに影響を与えたコミットを探します。もしそのファイルパスがどのコミットにも存在しない場合、Git は「そのようなパスは存在しません」と教えてくれます。
この動作の違いは、これらのコマンドがどのように機能するかを明確に示しています。
git ls-tree
は、特定のスナップショット(コミット)を調べ、その内容をリストします。
git log -- <file>
は、特定のファイルパスに関連する変更を履歴全体から検索します。
これらの違いを理解することで、タスクに適したコマンドを選ぶことができます。コミットに含まれていたファイルを確認したい場合は git ls-tree
を使い、ファイルの履歴を確認したい場合は git log -- <file>
を使いましょう。