Git リポジトリにステージング済みの変更があるかどうかを確認する方法

GitGitBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Git リポジトリにステージングされた変更があるかどうかを確認する方法を学びます。git status コマンドを使用して、ステージングされたファイルを表示し、その出力を理解します。この出力には、変更されたファイル、ステージングされたファイル、および追跡されていないファイルを含むリポジトリの現在の状態が示されます。

さらに、git diff --cached を使用して、現在ステージングエリアにある特定の変更を調べる方法を探ります。これにより、リポジトリ内のステージングされた変更とステージングされていない変更の違いを確認することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/status("Check Status") git/BasicOperationsGroup -.-> git/diff("Compare Changes") subgraph Lab Skills git/add -.-> lab-560089{{"Git リポジトリにステージング済みの変更があるかどうかを確認する方法"}} git/status -.-> lab-560089{{"Git リポジトリにステージング済みの変更があるかどうかを確認する方法"}} git/diff -.-> lab-560089{{"Git リポジトリにステージング済みの変更があるかどうかを確認する方法"}} end

git status を使用してステージングされたファイルを表示する

このステップでは、ファイルを追加した後に Git がどのように変更を追跡するかを確認するために、再度 git status コマンドを使用します。

まず、my-time-machine ディレクトリにいることを確認してください。もしいない場合は、cd コマンドを使用します。

cd ~/project/my-time-machine

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

echo "Ideas for the future" > notes.txt

このコマンドは、指定されたテキストで notes.txt ファイルを作成します。

次に、この新しいファイルを Git が追跡するように指示しましょう。これには git add コマンドを使用します。

git add notes.txt

このコマンドは、notes.txt をステージングエリアに追加します。ステージングエリアは、変更がコミットされる前の待機場所のようなものです。

では、git status を使用してリポジトリの状態を確認しましょう。

git status

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

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

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

出力には、「Changes to be committed」の下に notes.txt が表示されていることに注意してください。これは、このファイルがステージングエリアにあり、次のコミットに含まれる準備ができていることを意味します。

また、「Untracked files」の下に message.txt がリストされている場合もあります。これは、前のステップで message.txt の変更をまだコミットしていないためです。Git は、作業ディレクトリにまだ次のコミットで追跡されていない変更があることを示しています。

git status の出力を理解することは非常に重要です。これは、リポジトリの現在の状態を示し、どのファイルが変更されたか、どのファイルがコミットのためにステージングされているか、どのファイルが追跡されていないかを示します。これにより、作業を追跡し、次のセーブポイントに何を含めるかを決定するのに役立ちます。

git diff --cached で変更を確認する

このステップでは、git diff --cached コマンドを使用して、現在ステージングエリアにある正確な変更を確認する方法を学びます。

前のステップで notes.txt をステージングエリアに追加したことを思い出してください。では、Git がコミットする準備ができている変更を確認しましょう。

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

cd ~/project/my-time-machine

次に、以下のコマンドを実行します。

git diff --cached

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

diff --git a/notes.txt b/notes.txt
new file mode 100644
index 0000000..a1b2c3d
--- /dev/null
+++ b/notes.txt
@@ -0,0 +1 @@
+Ideas for the future

この出力は、ステージングエリアと最後のコミットとの違いを示しています。これは notes.txt を初めてステージングするため、Git はこれを新しいファイルとして表示します。

出力を分解してみましょう。

  • diff --git a/notes.txt b/notes.txt: この行は、notes.txt ファイルの 2 つのバージョンを比較していることを示しています。
  • new file mode 100644: これは、notes.txt が新しいファイルであることを示しています。
  • index 0000000..a1b2c3d: これらは、ファイルの内容の Git 内部識別子です。
  • --- /dev/null: これは、ファイルが追加される前の「空」の状態を表しています。
  • +++ b/notes.txt: これは、ステージングエリア内のファイルの現在の状態を表しています。
  • @@ -0,0 +1 @@: これは、変更された行を示すヘッダーです。-0,0 は元の(空の)状態には行が存在しなかったことを意味し、+1 は新しい状態で 1 行が追加されたことを意味します。
  • +Ideas for the future: プラス記号 + は、この行が追加されたことを示しています。

git diff --cached コマンドは、コミットする前にステージングされた変更をレビューするのに非常に便利です。これにより、プロジェクトの履歴に保存しようとしている正確な内容を再確認することができます。これは、意図しない変更を誤ってコミットするのを防ぐのに役立ちます。

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

ステージング済みと未ステージングの変更を確認する

このステップでは、Git が既に追跡しているファイルを変更することで、ステージング済みと未ステージングの変更の違いをさらに探ります。

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

cd ~/project/my-time-machine

次に、notes.txt ファイルに別の行を追加しましょう。echo コマンドと >> を使用して、既存のファイルにテキストを追加できます。

echo "Another idea" >> notes.txt

このコマンドは、「Another idea」という行を notes.txt の末尾に追加します。

再度、リポジトリの状態を確認しましょう。

git status

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

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   notes.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:   notes.txt

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

notes.txt が 2 つのセクションに表示されていることに注意してください。

  1. Changes to be committed:これは、前のステップでステージングエリアに追加した notes.txt のバージョン(「Ideas for the future」のみが含まれている)を指します。
  2. Changes not staged for commit:これは、notes.txt に対して今行った変更(「Another idea」を追加すること)を指します。これらの変更は作業ディレクトリにありますが、まだステージングエリアに追加されていません。

これが Git の重要な概念です。ステージングエリアは、次のコミットの準備ができた変更のスナップショットを保持し、作業ディレクトリには、まだステージングされていない変更を含むファイルの現在の状態が含まれています。

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

git diff

これにより、まだステージングされていない変更が表示されます。「Another idea」という行が追加されたことを示す出力が表示されるはずです。

ステージングエリアと最後のコミットの違いを確認するには(前のステップで見た内容)、git diff --cached を使用します。

ステージング済みと未ステージングの変更の違いを理解し、git statusgit diff でそれらを表示する方法を知ることは、Git を効果的に使用するための基本です。これにより、各コミットに何を含めるかを正確に制御できます。

まとめ

この実験では、Git リポジトリにステージング済みの変更があるかどうかを確認する方法を学びました。まず、git status コマンドを使用して、ステージングエリアに追加されたファイルを含むリポジトリの現在の状態を確認しました。git status がどのファイルが「Changes to be committed」であるかを明確に示す方法を見ました。

次に、git diff --cached コマンドを調べ、ステージング済みの変更と最後のコミットとの違いを具体的に確認しました。これにより、コミットの準備ができている正確な内容の変更を確認することができました。最後に、ステージング済みと未ステージングの変更の違いを強化し、git status が概要を提供し、git diff --cached がステージング済みの変更の詳細な内容を示すことを理解しました。