Git でファイルがステージングされているかどうかを確認する方法

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

はじめに

この実験では、Git でファイルがステージングされているかどうかを確認する方法を学びます。git status コマンドを使ってリポジトリの状態を確認し、ステージングされたファイルを特定します。次に、git diff --cached を使って現在ステージングエリアにある具体的な変更を確認し、次のコミットに含まれる内容を明確に把握します。最後に、ステージングされていないファイルを使ってテストを行い、ステージングプロセスの理解をさらに深めます。

ステージングされたファイルの git status を確認する

このステップでは、ファイルをステージングエリアに追加した後の Git リポジトリのステータスを確認します。これにより、Git がコミット前の変更をどのように追跡するかを理解するのに役立ちます。

まず、my-time-machine ディレクトリにいることを確認してください。cd コマンドを使ってそこに移動できます。

cd ~/project/my-time-machine

次に、future_plans.txt という新しいファイルを作成し、それにいくつかの内容を追加しましょう。

echo "Plan 1: Build a bigger time machine" > future_plans.txt

このコマンドは、ファイルを作成し、「Plan 1: Build a bigger time machine」というテキストを書き込みます。

次に、git add コマンドを使ってこの新しいファイルをステージングエリアに追加します。

git add future_plans.txt

git add は変更をステージングし、次のコミットの準備をします。ただし、コミット自体はまだ作成されません。

では、git status を使ってリポジトリのステータスを確認しましょう。

git status

次のような出力が表示されるはずです。

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   future_plans.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt ## This file is already committed, but Git status shows it differently after a commit. Don't worry about this for now.

「Changes to be committed:」セクションに注目してください。これは、future_plans.txt が現在ステージングエリアにあり、次のコミットに含まれる準備ができていることを示しています。Git はこれを「新しいファイル」と認識しています。

ステージングエリアを理解することは、Git では非常に重要です。これにより、コミットする前に関連する変更をまとめることができます。つまり、複数の作業を行っていても、準備ができた特定の変更のみをコミットすることができます。

git diff --cached を使って確認する

このステップでは、現在ステージングエリアにある変更を確認する方法を学びます。この際に便利なのが git diff コマンドで、特に --cached オプションを使います。

まだ ~/project/my-time-machine ディレクトリにいることを確認してください。

前に future_plans.txt をステージングエリアに追加しました。では、git diff --cached を使って、具体的にどのような変更がステージングされているかを確認しましょう。

git diff --cached

次のような出力が表示されるはずです。

diff --git a/future_plans.txt b/future_plans.txt
new file mode 100644
index 0000000..a1b2c3d
--- /dev/null
+++ b/future_plans.txt
@@ -0,0 +1 @@
+Plan 1: Build a bigger time machine

この出力を解説しましょう。

  • diff --git a/future_plans.txt b/future_plans.txt:この行は、Git が future_plans.txt ファイルの 2 つのバージョン間の差分を表示していることを示しています。
  • new file mode 100644:これは、future_plans.txt が新しいファイルであることを示しています。
  • index 0000000..a1b2c3d:これらは、ファイルの内容に関する Git の内部識別子です。
  • --- /dev/null+++ b/future_plans.txt:これらの行は、ファイルが何もない状態 (/dev/null) から future_plans.txt の新しいバージョンと比較されていることを示しています。
  • @@ -0,0 +1 @@:これは「ハンクヘッダー」で、変更された行を示しています。-0,0 は元の(存在しない)ファイルからの 0 行を意味し、+1 は新しいファイルの 1 行を意味します。
  • +Plan 1: Build a bigger time machine:行の先頭の + 記号は、この行が追加されたことを示しています。

git diff --cached コマンドは、ステージングエリアと最後のコミットとの差分を表示します。このリポジトリではまだコミットを行っていないため(前の実験での初期コミットを除く)、ステージングエリアと空の状態との差分が表示されます。

このコマンドは、コミットする前にステージングされた変更をレビューするのに非常に便利です。意図した変更のみをコミットすることを確認するのに役立ちます。

q を押して差分表示を終了し、コマンドラインに戻ります。

未ステージングのファイルをテストする

このステップでは、追跡対象のファイルに対して行われた変更で、まだステージングエリアに追加されていないものを Git がどのように扱うかを調べます。これらは「未ステージング (unstaged)」の変更と呼ばれます。

~/project/my-time-machine ディレクトリにいることを確認してください。

前に future_plans.txt を作成し、ステージングエリアに追加しました。では、このファイルに別の行を追加しますが、変更をステージングしません。

echo "Plan 2: Invent a self-folding laundry machine" >> future_plans.txt

>> 演算子は、テキストを既存のファイルに追記します。上書きするのではありません。

では、再度リポジトリのステータスを確認しましょう。

git status

次のような出力が表示されるはずです。

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   future_plans.txt

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:   future_plans.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

新しいセクション「Changes not staged for commit:」に注目してください。これは、Git が future_plans.txt にステージングエリアのバージョンと異なる変更を検出したことを示しています。このファイルは「modified」(変更済み)としてリストされています。

これが Git の重要な概念です。作業ディレクトリ(変更を行う場所)はステージングエリアとは別です。作業ディレクトリにまだステージングされていない変更があることがあります。

作業ディレクトリとステージングエリアの差分を確認するには、オプションを指定せずに git diff を使用できます。

git diff

次のような出力が表示されるはずです。

diff --git a/future_plans.txt b/future_plans.txt
index a1b2c3d..e4f5g6h 100644
--- a/future_plans.txt
+++ b/future_plans.txt
@@ -1 +1,2 @@
 Plan 1: Build a bigger time machine
+Plan 2: Invent a self-folding laundry machine

この出力は、ステージングエリアの future_plans.txt のバージョン(「Plan 1」のみ)と作業ディレクトリのバージョン(「Plan 1」と「Plan 2」の両方がある)の差分を示しています。+ 記号は、追加された行を示しています。

ステージングされた変更と未ステージングの変更の違いを理解し、git statusgit diff でそれらを確認する方法を知ることは、Git を効果的に使用するための基本です。

q を押して差分表示を終了します。

まとめ

この実験では、Git でファイルがステージングされているかどうかを確認する方法を学びました。まず、新しいファイルを作成し、git add を使用してステージングエリアに追加しました。次に、git status を使用して、ファイルが「Changes to be committed」の下にリストされていることを確認し、ステージングされていることを確認しました。

また、git diff --cached を使用して、現在ステージングエリアにある具体的な変更を確認し、次のコミットに含まれる内容を詳細に調べました。最後に、未ステージングのファイルで git status の動作をテストし、ステージングされた変更と未ステージングの変更を区別しました。