変更されていないファイルでテストする
前のステップでは、git show --name-only と git diff-tree -r --name-only が特定のコミットで変更されたファイルを表示する方法を見ました。では、ファイルが変更されていないコミットに対してこれらのコマンドを実行するとどうなるか見てみましょう(現時点での単一のコミットではこの状況はないですが、概念をシミュレートできます)。
現在のリポジトリには、ファイルが追加されたコミットが 1 つしかないため、そのコミットに対してこれらのコマンドを実行すると、常に message.txt が表示されます。変更された ファイルのみを表示する概念を説明するために、ファイルを一切変更しないコミットがあったと想像してみましょう(これは通常、マージコミットやメタデータのみを変更するコミットで起こりますが、この演習では、ファイルがリストされない場合の出力に焦点を当てます)。
ファイルを一切変更しないコミットに対して git show --name-only または git diff-tree -r --name-only を実行すると、ファイル名の部分の出力は空になります。
概念を強化するために、学んだコマンドを再度実行しましょう。my-time-machine ディレクトリにいることを確認します。
cd ~/project/my-time-machine
再度 git show --name-only を実行します。
git show --name-only HEAD
出力は以下のようになります。
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
Author: Jane Doe <jane.doe@example.com>
Date: Mon Aug 7 10:00:00 2023 +0000
Send a message to the future
message.txt
次に、再度 git diff-tree -r --name-only を実行します。
git diff-tree -r --name-only HEAD
出力は以下のようになります。
message.txt
両方のコマンドとも正しく message.txt を表示します。なぜなら、そのファイルはこのコミットで導入されたからです。ここで重要なのは、これらのコマンドは指定されたコミットで変更された(追加、削除、または修正された)ファイルのみをリストするように設計されているということです。コミットがファイルを一切変更しない場合、これらのコマンド(具体的にはファイルリストの部分)は何も表示しません。
この動作は、コミットによって導入された変更の範囲を理解するために重要です。特定の変更がプロジェクトのどの部分に影響を与えたかをすばやく識別するのに役立ちます。