特定の Git コミットの変更を表示する方法

GitBeginner
オンラインで実践に進む

はじめに

Git は、開発者が変更を追跡し、共同作業を行い、コードベースを効果的に管理するのに役立つ強力なバージョン管理システムです。Git における基本的なスキルは、プロジェクトの履歴を検査して、いつ、誰がどのような変更を加えたかを確認できる能力です。この実験では、特定の Git コミットで導入された変更を表示する方法を学びます。これは、プロジェクトの進化を理解し、コードをレビューし、問題をトラブルシューティングするために不可欠です。

コミット履歴の探索

特定のコミットの変更を表示するには、まずそのコミットを見つける必要があります。git log コマンドは、リポジトリのコミット履歴を表示するために使用されます。この実験では、~/project/git-demo にサンプル Git リポジトリが作成されています。

まず、プロジェクトディレクトリに移動します。この実験のすべてのコマンドは、このディレクトリ内で実行する必要があります。

cd ~/project/git-demo

次に、--oneline オプション付きの git log コマンドを使用して、コミット履歴のコンパクトなビューを表示します。これにより、すべてのコミットのリストが表示され、各コミットには一意のコミットハッシュとコミットメッセージが含まれます。

git log --oneline

以下のような出力が表示されるはずです。画面上のコミットハッシュは異なりますが、メッセージは同じです。

a1b2c3d (HEAD -> master) Add application file
e4f5g6h Update README with project description
i7j8k9l Initial commit: Add README.md

各行はコミットを表します。各行の先頭にある 7 文字の文字列(例:a1b2c3d)は、コミットハッシュの短縮版であり、コミットを一意に識別します。これらのハッシュは、次のステップで特定のコミットを検査するために使用します。

特定コミットの変更を表示する

コミットのリストが得られたので、git show コマンドを使用して特定のコミットの詳細と変更を表示できます。このコマンドは、コミットのメタデータ(作成者、日付、メッセージ)と、追加または削除された正確な行をハイライトする「差分」を表示します。

2 番目のコミット、「Update README with project description」というメッセージのコミットを調べてみましょう。前のステップの出力からそのコミットハッシュを見つけてください。

ハッシュをコピーし、git show で使用します。<commit-hash> をターミナルから実際のハッシュに置き換えてください。

git show <commit-hash>

例えば、そのコミットのハッシュが e4f5g6h だった場合、以下のように実行します。

git show e4f5g6h

出力は以下のようになります。

commit e4f5g6h1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7
Author: LabEx <labex@example.com>
Date:   ...

    Update README with project description

diff --git a/README.md b/README.md
index ...
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
 ## My Project
+
+This is a simple project to demonstrate Git.

出力の内訳を見てみましょう。

  • コミットメタデータ: 最初の数行は、完全なコミットハッシュ、作成者、日付、およびコミットメッセージを示します。
  • 差分セクション: diff --git で始まる部分は「差分」です。
    • --- a/README.md+++ b/README.md は、ファイルの「変更前」と「変更後」のバージョンを示します。
    • + で始まる行は、このコミットで追加された行です。
    • - で始まる行(この例にはありません)は、削除された行です。

コミット内の特定のファイルの変更を表示する

コミットが複数のファイルを変更した場合でも、特定の 1 つのファイルへの変更のみに関心がある場合があります。git show コマンドの末尾にファイルパスを追加することで、特定のファイルへの変更のみを表示するように git show に指示できます。

最新のコミット、「Add application file」というメッセージのコミットを見てみましょう。このコミットは app.py ファイルを追加しました。

まず、git log --oneline の出力から最新のコミットのハッシュを取得します。次に、そのハッシュと --、そしてファイル名 app.py を付けて git show を実行します。

git show app.py < latest-commit-hash > --

例えば、最新のコミットハッシュが a1b2c3d の場合、コマンドは次のようになります。

git show a1b2c3d -- app.py

出力は、そのコミットで app.py に対して行われた変更のみに限定されます。

commit a1b2c3d...
Author: LabEx <labex@example.com>
Date:   ...

    Add application file

diff --git a/app.py b/app.py
new file mode 100644
index 0000000..d95f32b
--- /dev/null
+++ b/app.py
@@ -0,0 +1 @@
+print("Hello, Git!")

出力がはるかに短くなり、app.py の差分のみが含まれていることに注意してください。new file mode 100644 という行は、このファイルがこのコミットで作成されたことを示しています。

2 つのコミットの比較

git show が単一のコミット内の変更を表示するのに対し、git diff を使用すると、任意の 2 つのコミット間の累積的な変更を表示できます。これは、2 つのリリース間など、2 つの時点間のすべての変更を確認するのに役立ちます。

最初のコミット(「Initial commit: Add README.md」)と最後のコミット(「Add application file」)を比較して、これまでにプロジェクトで行われたすべての変更を見てみましょう。最初のコミットと最後のコミットのコミットハッシュが必要になります。

2 つのハッシュを指定して git diff コマンドを使用します。

git diff <first-commit-hash> <last-commit-hash>

例えば、最初のコミットハッシュが i7j8k9l で、最後のコミットハッシュが a1b2c3d の場合:

git diff i7j8k9l a1b2c3d

出力には、これらの 2 つのコミット間で行われたすべての変更の統合された差分が表示されます。

diff --git a/README.md b/README.md
index ...
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
 ## My Project
+
+This is a simple project to demonstrate Git.
diff --git a/app.py b/app.py
new file mode 100644
index 0000000..d95f32b
--- /dev/null
+++ b/app.py
@@ -0,0 +1 @@
+print("Hello, Git!")

この出力は、README.md の更新と app.py の作成の両方を示しており、これら 2 つの時点間のプロジェクトの進化の全体像を把握できます。

まとめ

この実験では、Git リポジトリの履歴をナビゲートし、変更を検査する方法を学びました。git log を使用してコミットをリスト表示し、git show を使用して単一のコミット内の詳細と変更(コミット全体および特定のファイルの両方)を表示し、git diff を使用して 2 つのコミット間の違いを比較する練習をしました。これらのコマンドは、コードの変更を理解し、デバッグし、あらゆる Git ベースのプロジェクトで効果的に共同作業を行うための基本となります。