Git リポジトリに未コミットの変更があるかどうかを確認する方法

GitGitBeginner
今すぐ練習

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

はじめに

この実験では、Git リポジトリ内の未コミットの変更を確認する方法を学びます。作業ディレクトリの全体的な状態とステージングされた変更を表示するために、重要な git status コマンドを調べます。

さらに、git diff コマンドを使用してファイルに加えられた具体的な変更を調べる方法を学びます。これにより、コミットする前に正確に何が変更されたかを確認できます。最後に、ステージングされた変更とステージングされていない変更の両方のチェックを組み合わせる方法についても簡単に触れます。


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-560091{{"Git リポジトリに未コミットの変更があるかどうかを確認する方法"}} git/status -.-> lab-560091{{"Git リポジトリに未コミットの変更があるかどうかを確認する方法"}} git/diff -.-> lab-560091{{"Git リポジトリに未コミットの変更があるかどうかを確認する方法"}} end

git status を実行して変更を表示する

このステップでは、git status コマンドを使用して Git リポジトリの現在の状態を確認する方法を学びます。このコマンドは、Git を使用する際の最良のツールであり、正確に何が起こっているかを教えてくれます。

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

cd ~/project/my-time-machine

では、git status コマンドを実行しましょう。

git status

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

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

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

  • On branch master: 現在 master ブランチにいることを示しています。ブランチは、プロジェクト内の異なるタイムラインのようなものです。
  • Your branch is up to date with 'origin/master': ローカルの master ブランチがリモートの origin/master ブランチと同期されていることを示しています(リモートリポジトリについては後で詳しく学びます)。
  • nothing to commit, working tree clean: これは理想的な状態です!プロジェクトに Git 履歴に保存(コミット)されていない変更がないことを意味します。

git status コマンドは、どのファイルが変更されたか、どのファイルが新規で追跡されていないか、どの変更がコミットの準備ができているかを理解するのに役立つため、非常に重要です。プロジェクトに変更を加えた後、最初に実行するコマンドは、Git がそれらの変更をどのように認識しているかを確認するための git status です。

git diff を使用して変更を調べる

このステップでは、git diff コマンドを使用して、ファイルに加えた正確な変更を確認する方法を学びます。git status はどのファイルが変更されたかを教えてくれますが、git diff はそれらのファイル内で何が変更されたかを示します。

まず、message.txt ファイルに変更を加えましょう。~/project/my-time-machine ディレクトリにいることを確認してください。

nano エディタを使用してファイルを開きます。

nano message.txt

ファイルに新しい行を追加します。例えば:

Hello, Future Me
This is a new line.

Ctrl + X を押してエディタを終了し、Y を押して保存し、Enter を押してファイル名を確認します。

ファイルを変更したので、git status を使用して Git がこの変更をどのように認識しているかを確認しましょう。

git status

message.txt が変更されたことを示す出力が表示されるはずです。

On branch master
Your branch is up to date with 'origin/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 は、message.txtmodified(変更された)で、変更が not staged for commit(コミットのためにステージングされていない)ことを教えてくれます。これは、ファイルを変更したが、まだ Git にこの変更をコミットの準備をするように指示していないことを意味します。

では、git diff を使用して具体的な変更を確認しましょう。

git diff

次のような出力が表示されます。

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+This is a new line.

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

  • ---+++ で始まる行は、元のファイル (a/message.txt) と新しいファイル (b/message.txt) を示しています。
  • @@ で始まる行は「ハンクヘッダー」と呼ばれます。これは、ファイル内で変更が行われた場所を示しています。-1 +1,2 は、元のファイルの 1 行目から 1 行が削除され、新しいファイルの 1 行目から 2 行が追加されたことを意味します。
  • - で始まる行は削除された行を示します。
  • + で始まる行は追加された行を示します。

今回の場合、1 行を追加したので、+ で始まる行が表示されます。

git diff コマンドは、変更をステージングまたはコミットする前にレビューするのに非常に便利です。これにより、ミスを見つけ、コミットに意図した変更のみを含めることができます。

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

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

このステップでは、Git がステージング済みと未ステージングの変更をどのように扱うか、および git diff を使用してこれらの変更を調べる方法を探ります。

前のステップで、message.txt を変更したが変更をステージングしなかったことを思い出してください。今度は git add を使用して変更をステージングしましょう。

git add message.txt

次に、再度 git status を実行します。

git status

出力は、変更が現在ステージングされていることを示すはずです。

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   message.txt

Git は Changes to be committed と表示し、message.txt の変更がステージングエリアにあり、次のコミットの準備ができていることを示しています。

ここで git diff を実行するとどうなるでしょうか?

git diff

出力が何も表示されないことに驚くかもしれません。これは、git diff はデフォルトで作業ディレクトリとステージングエリアの差分を表示するためです。作業ディレクトリの変更が現在ステージングエリアの変更と同じであるため(先ほど追加したから)、表示する差分がありません。

ステージングエリアと最後のコミットの差分を表示するには、git diff コマンドの別の形式を使用する必要があります。

git diff --staged

または、同等のコマンドとして:

git diff --cached

どちらのコマンドも同じことを行います。実行してみましょう。

git diff --staged

これで、ステージングされた変更と最後のコミットの差分が表示されるはずです。

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+This is a new line.

これは、私たちが行った正確な変更、つまり「This is a new line.」という行を追加したことを示しています。

git diff(作業ディレクトリ vs. ステージングエリア)と git diff --staged(ステージングエリア vs. 最後のコミット)の違いを理解することは、Git を効果的に使用するための基本です。これにより、永続的なコミットを行う前に、異なる段階で変更を注意深くレビューすることができます。

まとめ

この実験では、Git リポジトリ内の未コミットの変更を確認する方法を学びました。まず、git status コマンドを使用して、現在のブランチや、変更されたファイル、新しいファイル、追跡されていないファイルがあるかなど、リポジトリの状態の概要を把握しました。このコマンドは、存在する変更を理解するために不可欠です。

次に、git diff コマンドを使って、ファイル内で行われた具体的な変更を調べました。git status はどのファイルが変更されたかを教えてくれますが、git diff は正確な行ごとの差分を表示し、変更内容をステージングまたはコミットする前にレビューすることができます。