はじめに
この実験では、Git リポジトリ内の未コミットの変更を確認する方法を学びます。作業ディレクトリの全体的な状態とステージングされた変更を表示するために、重要な git status コマンドを調べます。
さらに、git diff コマンドを使用してファイルに加えられた具体的な変更を調べる方法を学びます。これにより、コミットする前に正確に何が変更されたかを確認できます。最後に、ステージングされた変更とステージングされていない変更の両方のチェックを組み合わせる方法についても簡単に触れます。
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.txt が modified(変更された)で、変更が 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 は正確な行ごとの差分を表示し、変更内容をステージングまたはコミットする前にレビューすることができます。



