はじめに
この実験では、特定の Git コミットでファイルが追加されたかどうかを確認する方法を学びます。コミットの詳細を調べ、新しく追加されたファイルを特定するために、さまざまな Git コマンドを探索します。
まず、git show --name-status を使用して、コミット内の変更の簡潔な概要を表示し、特に追加されたファイルを示す 'A' ステータスを探します。次に、関連するオプションを使用して git diff-tree を使用する方法を学び、同様の結果を得ることができます。これは、スクリプト作成や高度なシナリオで特に役立ちます。最後に、コミット履歴内の修正されたファイルと追加されたファイルを区別します。
git show --name-status を実行する
このステップでは、特定のコミットの詳細、つまりどのファイルがどのように変更されたかを表示する方法を探ります。--name-status オプション付きの git show コマンドを使用します。
まず、my-time-machine ディレクトリにいることを確認してください。
cd ~/project/my-time-machine
では、前の実験で行ったコミットを見るために git show を使用しましょう。最新のコミットを参照するために HEAD エイリアスを使用できます。
git show --name-status HEAD
以下のような出力が表示されるはずです。
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date: Mon Aug 7 10:00:00 2023 +0000
Send a message to the future
A message.txt
この出力を分解してみましょう。
- 最初の部分は、
git logで見たのと同様のコミットの詳細を示しています。 A message.txtの行がここで重要な部分です。Aは "Added"(追加)を表します。これは、message.txtファイルがこのコミットで追加されたことを示しています。message.txtは影響を受けたファイルの名前です。
--name-status オプションは非常に便利です。コミットによって導入された変更の簡潔な概要を提供し、ファイルの名前とそのステータス(追加、修正、削除など)のみを表示します。関係するファイルがどれかを知りたいだけの場合、完全な差分を見るよりも迅速です。
コミットを調査する方法を理解することは、プロジェクトの履歴をたどり、その進化の仕方を理解するために重要です。
追加されたファイルに git diff-tree を使用する
このステップでは、別のコマンド git diff-tree を使って、コミットによって導入された変更を確認します。git show はコミットの詳細や差分を見るのに便利ですが、git diff-tree はスクリプト作成や高度なシナリオで役立ちます。
まだ ~/project/my-time-machine ディレクトリにいることを確認してください。
git diff-tree を -r(再帰的)と --name-status オプションを付けて、コミットハッシュを指定して使用します。コミットハッシュは git log や git show の出力から取得できます。最初のコミットの場合は、HEAD を使用することもできます。
git diff-tree -r --name-status HEAD
以下のような出力が表示されるはずです。
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 A message.txt
出力を見てみましょう。
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9はコミットハッシュです。Aはファイルの変更ステータス(追加)を示しています。message.txtはファイル名です。
この出力は git show の --name-status 部分と非常に似ています。最初のコミットのような単純なコミット(ファイルを追加しただけのコミット)では、出力はほぼ同じです。ただし、git diff-tree はより柔軟で、コミットだけでなく、リポジトリ内の異なるツリー(スナップショット)を比較するために使用することができます。
現時点で重要なのは、git show --name-status と git diff-tree -r --name-status の両方が、特定のコミットでどのファイルがどのように変更されたかを表示できるということです。これは、プロジェクトの履歴を理解するための基本的なスキルです。
変更されたファイルと追加されたファイルをテストする
前のステップでは、git show --name-status と git diff-tree --name-status が追加されたファイルに対して A を表示する方法を見ました。では、ファイルが修正された場合にこれらのコマンドがどのように動作するかを見てみましょう。
まず、~/project/my-time-machine ディレクトリにいることを確認してください。
message.txt ファイルに別の行を追加しましょう。
echo "Hello again, Future Me" >> message.txt
>> 演算子は、テキストを既存のファイルに追加します。
では、リポジトリの状態を確認しましょう。
git status
message.txt が修正されたことを示す出力が表示されるはずです。
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: message.txt
no changes added to commit (use "git add" and/or "git commit -a")
Git はファイルが modified(修正された)ことを正しく識別しています。
では、この変更をステージングしましょう。
git add message.txt
そして、再度状態を確認しましょう。
git status
出力は、変更がステージングされたことを示すはずです。
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: message.txt
コンテンツを追加したにもかかわらず、Git はこれを modified ファイルとして追跡していることに注意してください。なぜなら、このファイルは前のコミットですでに存在していたからです。
最後に、この変更をコミットしましょう。
git commit -m "Add another message to the future"
コミットが確定したことを示す出力が表示されるはずです。
[master a1b2c3d] Add another message to the future
1 file changed, 1 insertion(+)
これで新しいコミットができました。最新のコミット (HEAD) に対して git show --name-status を使用して、状態を確認しましょう。
git show --name-status HEAD
出力は次のようになります。
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date: Mon Aug 7 10:05:00 2023 +0000
Add another message to the future
M message.txt
message.txt の前に M があることに注意してください。これは、このコミットでファイルが Modified(修正された)ことを示しています。
同様に、git diff-tree -r --name-status HEAD を使用しても、M ステータスが表示されます。
A(追加)と M(修正)のこの区別は、Git でのファイルの履歴を理解するために重要です。A はそのコミットでファイルが作成されたことを意味し、M はファイルが以前から存在し、その内容が変更されたことを意味します。
まとめ
この実験では、Git のコミットでファイルが追加されたかどうかを確認する方法を学びました。まず、git show --name-status コマンドを調べました。このコマンドは、コミット内の変更の簡潔な概要を提供し、追加されたファイルのステータス(「A」など)と影響を受けるファイルの名前を表示します。これは、完全な差分を表示せずに、コミットに関与したファイルをすばやく確認する方法です。
次に、-r と --name-status オプションを使用した git diff-tree コマンドを紹介しました。これは、コミットの変更を調べるための別の方法であり、特にスクリプト作成や高度なシナリオで役立ちます。このステップの詳細は提供されていませんが、紹介文から、異なる Git コマンドを使用してコミット内の追加されたファイルを特定する方法をさらに調べることが目的であることがわかります。



