【Git基礎】コミット前のセルフチェック:差分(diff)の読み方と確認フロー

記事の説明を修正したつもりなのに、関係のない段落まで消してしまった。READMEに追記した内容を、コミットする前にもう一度確かめたい。そんなときに役立つのが、diff、つまり差分です。

差分は、2つの状態を比べて、変わった部分を示します。Gitでは、編集中の内容、ステージングした内容、コミット済みの内容などを比べられます。

この記事では、READMEの修正を例に、差分の読み方と確認の手順を学びます。掲載する文章と出力は説明用の例で、Git公式資料に基づく入門記事です。

目次

1. 差分は「変わった部分」を見るためのもの

差分を読むときは、最初に「何と何を比べているか」を確認します。

たとえば、READMEの保存場所の説明を、次のように修正したとします。

状態 READMEの文章
修正前 原稿はメモフォルダーに保存します。
修正後 原稿はarticlesフォルダーに保存します。

差分では、修正前の行を取り除き、修正後の行を追加した形で表示できます。ファイル全体を読み直すときよりも、今回の変更に注目しやすくなります。

Gitのdiffには、作業中のファイルを比較する使い方と、コミット同士を比較する使い方があります。比較対象を指定することが、差分確認の出発点です。Git公式:git diff

差分を見ただけで、文章やプログラムが正しいと保証されるわけではありません。変更の意図を確認し、必要に応じて前後の文章を読んだり、動作を確かめたりします。

2. statusで一覧を見て、diffで中身を見る

git statusとgit diffは、確認する内容が違います。

コマンド 確認すること 読むときの問い
git status 変更されたファイルや、ステージングの状態 どのファイルに変更があるか?
git diff ステージング前の変更の中身 どの行をどう変えたか?
git diff --staged ステージングした変更の中身 次のコミットに何を含めるか?

まず一覧で対象をつかみ、それから行ごとの変更を読むと整理しやすくなります。git statusは、作業ツリーとステージングエリアの状態に加え、未追跡ファイルも表示します。Git公式:git status

新しく作った未追跡ファイルは、通常のgit diffには内容が表示されません。ステージングすると、追加予定のファイルとしてgit diff --stagedで確認できます。「diffに出ていないから、ファイルを作っていない」と判断しないようにしましょう。Git公式:変更の記録

3. マイナス・プラス・行番号を読む

READMEの修正を、差分として表すと次のようになります。これは、読み方を説明するための出力例です。

diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
 # 記事メモ
-原稿はメモフォルダーに保存します。
+原稿はarticlesフォルダーに保存します。
 画像はimagesフォルダーに保存します。

読みどころを分けてみましょう。

表示 意味
diff --git a/README.md b/README.md 比較するファイルを示す見出し
--- a/README.md 比較の前側のファイル
+++ b/README.md 比較の後側のファイル
@@ -1,3 +1,3 @@ 前側は1行目から3行、後側も1行目から3行を示す範囲情報
本文の先頭にある- 前側にあり、後側では取り除かれた行
本文の先頭にある+ 後側に追加された行
本文の先頭にある空白 周囲の文脈を示す、変わっていない行

この例では「メモフォルダー」という説明を取り除き、「articlesフォルダー」という説明を追加しています。行の置き換えも、削除と追加の組み合わせで表されます。

a/とb/は比較する側を示す接頭辞で、実際にその名前のフォルダーを作ったという意味ではありません。また、---と+++のファイル見出しは、本文の削除・追加の行と区別して読みます。Git公式:差分の形式

ツールによって色や表示方法は異なります。色だけに頼らず、記号と比較対象を見て判断しましょう。

4. 比較する場所を変えると、見える差分も変わる

前回のコミット・ステージングの記事では、作業ツリー、ステージングエリア、コミット済みの履歴を分けて考えました。diffでも、この区別が大切です。

コマンド 比較の基準と対象
git diff ステージングエリアを基準に、作業ツリーを見る
git diff --staged HEADのコミットを基準に、ステージングエリアを見る
git diff HEAD HEADのコミットを基準に、作業ツリーを見る

HEADは現在の位置を示し、通常のブランチ上での作業では、そのブランチの先端コミットに対応します。上の表は、HEADのコミットが存在する通常のリポジトリを想定しています。

--stagedは--cachedと同じ意味です。git diff HEADは、ステージングの前後をまとめて、現在のファイルがHEADからどう変わったかを見るときに使えます。ただし、未追跡ファイルは含まれません。Git公式:git diffの比較対象

「差分を見る」という同じ言葉でも、何を基準にするかで結果が変わります。コマンドを実行する前に、見たいのは編集中の変更か、コミット予定の変更かを決めましょう。

比較の基準と対象の関係
HEADのコミット(比較の基準)git diff –staged:HEADを基準に比較
→
ステージングエリア
ステージングエリアgit diff:ステージングエリアを基準に比較
→
作業ツリー
HEADのコミット(比較の基準)git diff HEAD:HEADを基準に比較(未追跡ファイルは含まない)
→
作業ツリー

5. READMEの修正を確認してからコミットする

ここからは、コミット済みのREADMEがある練習用リポジトリを想定します。保存場所の説明を修正し、ファイルを保存したところから始めます。

手順1:変更されたファイルを確認する

git status

README以外にも変更があるなら、それが今回の作業に関係するかを確認します。

手順2:ステージング前の差分を読む

git diff -- README.md

対象をREADMEに絞って、追加した説明、取り除いた説明、周囲の文章を読みます。--は、オプションやコミットの指定と、ファイルの指定を区切るために使います。

手順3:変更を選んで、記録予定を確認する

git add README.md
git diff --staged

ここで見るのは、次のコミットに含まれる変更です。ほかのファイルがすでにステージングされていれば、それらも表示されるため、全体を確認します。

手順4:コミットし、残った変更を確認する

git commit -m "READMEの原稿保存先を修正"
git status

確認してから記録する、という順番を習慣にすると、意図しない変更に気づきやすくなります。ステージングとコミットの関係は、Git公式の変更記録の説明でも確認できます。Git公式:変更の記録

READMEの修正を確認してコミットする手順
  1. コミット済みのREADMEを修正して保存
    対象をつかむ ↓
  2. git status:変更されたファイルを確認
    変更の中身を読む ↓
  3. git diff — README.md:追加・削除・周囲の文章を読む
    確認した変更を選ぶ ↓
  4. git add README.md:変更をステージング
    次のコミットに含まれる変更を確認 ↓
  5. git diff –staged:ほかのステージング済みファイルも含めて確認
    確認してから記録 ↓
  6. git commit:確認した変更を記録
    記録後の状態を確認 ↓
  7. git status:残った変更を確認

6. diffが空でも、変更がないとは限らない

READMEの修正をgit addした後に、普通のgit diffを実行すると、何も表示されない場合があります。この場合は「変更が消えた」のではなく、作業ツリーとステージングエリアが一致している可能性があります。

そこでgit statusとgit diff --stagedを確認すると、コミット予定の変更が残っているかを判断できます。

さらに、ステージングした後でREADMEへ画像の保存先を追記すると、次のように分かれます。これは説明用の例です。

確認するコマンド この例で見える変更
git diff --staged 最初に選んだ、原稿の保存先の修正
git diff その後に編集した、画像の保存先の追記

追記も今回のコミットに含めたいなら、内容を確認して再びステージングします。ファイルを保存することと、次のコミットに含めることは別の操作です。Git公式:ステージング後の編集

何も表示されないときは、「どこを比べた結果が空なのか」を確認するのがポイントです。

ステージング後の編集と差分の分かれ方
原稿の保存先の修正をgit add普通のgit diffを確認
→
git diffが空の場合:作業ツリーとステージングエリアが一致している可能性
git diffが空の場合:作業ツリーとステージングエリアが一致している可能性変更が消えたと決めずに確認
→
git statusとgit diff –stagedで記録予定の変更を確認
原稿の保存先の修正をgit addさらに編集した場合
→
ステージング後に画像の保存先を追記する例
ステージング後に画像の保存先を追記する例コミット予定の変更を見る
→
git diff –staged:最初に選んだ原稿の保存先の修正
ステージング後に画像の保存先を追記する例ステージング後の変更を見る
→
git diff:その後に編集した画像の保存先の追記
git diff:その後に編集した画像の保存先の追記追記を含めたい場合
→
追記も今回のコミットに含めたいなら、内容を確認して再びステージング

7. 差分を読むときに確認したいこと

この記事のREADME修正なら、次の順で見直すと判断しやすくなります。

  1. 比較対象は、編集中の内容か、コミット予定の内容か。
  2. 変更したファイルは、今回の作業に必要なものか。
  3. 追加した説明は、実際の保存先と一致しているか。
  4. 削除した行に、残すべき説明が含まれていないか。
  5. 周囲の説明と矛盾していないか。

差分だけでは変更の理由はわかりません。理由をコミットメッセージや作業メモに残すと、あとから読む人が判断しやすくなります。

また、画像などのバイナリーファイルは、テキストのような行ごとの表示にならないことがあります。その場合は、変更前後の画像や、ファイルを開いた結果も確認します。差分表示の形式には複数の種類があります。Git公式:差分の形式

worktreeを使っている場合は、どの作業フォルダーでコマンドを実行しているかも確認してください。この確認手順は、前回の記事で分けた作業場所を取り違えないためにも役立ちます。

8. まとめと理解度確認

diffは、2つの状態を比べて、何が変わったかを読むための仕組みです。最初に比較対象を決め、追加と削除の中身を確認しましょう。

コミット前には、git statusで状態をつかみ、git diffで編集中の変更を読み、ステージング後にgit diff --stagedで記録予定を確かめる、という流れが使えます。

自分の言葉で説明してみる

  1. git statusとgit diffは、何を確認する点が違いますか?
  2. 差分本文の先頭にある-と+は、それぞれ何を示しますか?
  3. 次のコミットに含める変更を確認するコマンドは何ですか?
  4. ステージング後、普通のgit diffが空なら、変更は必ず消えていますか?
  5. 新しく作った未追跡ファイルの内容は、普通のgit diffに表示されますか?

解答例

  1. statusはファイルやステージングの状態を、diffは比較対象の変更の中身を確認します。
  2. -は前側から取り除かれた行、+は後側へ追加された行です。
  3. git diff --stagedです。git diff --cachedも同じ意味です。
  4. 消えたとは限りません。ステージング済みなら、普通のdiffが空でも記録予定の変更が残っている場合があります。
  5. 通常は表示されません。statusで存在を確認し、ステージング後にgit diff --stagedで追加内容を確認できます。

参考資料

資料確認日:2026年10月11日

記事の説明を修正したつもりなのに、関係のない段落まで消してしまった。READMEに追記した内容を、コミットする前にもう一度確かめたい。そんなときに役立つのが、diff、つまり差分です。

差分は、2つの状態を比べて、変わった部分を示します。Gitでは、編集中の内容、ステージングした内容、コミット済みの内容などを比べられます。

この記事では、READMEの修正を例に、差分の読み方と確認の手順を学びます。掲載する文章と出力は説明用の例で、Git公式資料に基づく入門記事です。

1. 差分は「変わった部分」を見るためのもの

差分を読むときは、最初に「何と何を比べているか」を確認します。

たとえば、READMEの保存場所の説明を、次のように修正したとします。

状態 READMEの文章
修正前 原稿はメモフォルダーに保存します。
修正後 原稿はarticlesフォルダーに保存します。

差分では、修正前の行を取り除き、修正後の行を追加した形で表示できます。ファイル全体を読み直すときよりも、今回の変更に注目しやすくなります。

Gitのdiffには、作業中のファイルを比較する使い方と、コミット同士を比較する使い方があります。比較対象を指定することが、差分確認の出発点です。Git公式:git diff

差分を見ただけで、文章やプログラムが正しいと保証されるわけではありません。変更の意図を確認し、必要に応じて前後の文章を読んだり、動作を確かめたりします。

2. statusで一覧を見て、diffで中身を見る

git statusとgit diffは、確認する内容が違います。

コマンド 確認すること 読むときの問い
git status 変更されたファイルや、ステージングの状態 どのファイルに変更があるか?
git diff ステージング前の変更の中身 どの行をどう変えたか?
git diff --staged ステージングした変更の中身 次のコミットに何を含めるか?

まず一覧で対象をつかみ、それから行ごとの変更を読むと整理しやすくなります。git statusは、作業ツリーとステージングエリアの状態に加え、未追跡ファイルも表示します。Git公式:git status

新しく作った未追跡ファイルは、通常のgit diffには内容が表示されません。ステージングすると、追加予定のファイルとしてgit diff --stagedで確認できます。「diffに出ていないから、ファイルを作っていない」と判断しないようにしましょう。Git公式:変更の記録

3. マイナス・プラス・行番号を読む

READMEの修正を、差分として表すと次のようになります。これは、読み方を説明するための出力例です。

diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,3 +1,3 @@
 # 記事メモ
-原稿はメモフォルダーに保存します。
+原稿はarticlesフォルダーに保存します。
 画像はimagesフォルダーに保存します。

読みどころを分けてみましょう。

表示 意味
diff --git a/README.md b/README.md 比較するファイルを示す見出し
--- a/README.md 比較の前側のファイル
+++ b/README.md 比較の後側のファイル
@@ -1,3 +1,3 @@ 前側は1行目から3行、後側も1行目から3行を示す範囲情報
本文の先頭にある- 前側にあり、後側では取り除かれた行
本文の先頭にある+ 後側に追加された行
本文の先頭にある空白 周囲の文脈を示す、変わっていない行

この例では「メモフォルダー」という説明を取り除き、「articlesフォルダー」という説明を追加しています。行の置き換えも、削除と追加の組み合わせで表されます。

a/とb/は比較する側を示す接頭辞で、実際にその名前のフォルダーを作ったという意味ではありません。また、---と+++のファイル見出しは、本文の削除・追加の行と区別して読みます。Git公式:差分の形式

ツールによって色や表示方法は異なります。色だけに頼らず、記号と比較対象を見て判断しましょう。

4. 比較する場所を変えると、見える差分も変わる

前回のコミット・ステージングの記事では、作業ツリー、ステージングエリア、コミット済みの履歴を分けて考えました。diffでも、この区別が大切です。

コマンド 比較の基準と対象
git diff ステージングエリアを基準に、作業ツリーを見る
git diff --staged HEADのコミットを基準に、ステージングエリアを見る
git diff HEAD HEADのコミットを基準に、作業ツリーを見る

HEADは現在の位置を示し、通常のブランチ上での作業では、そのブランチの先端コミットに対応します。上の表は、HEADのコミットが存在する通常のリポジトリを想定しています。

--stagedは--cachedと同じ意味です。git diff HEADは、ステージングの前後をまとめて、現在のファイルがHEADからどう変わったかを見るときに使えます。ただし、未追跡ファイルは含まれません。Git公式:git diffの比較対象

「差分を見る」という同じ言葉でも、何を基準にするかで結果が変わります。コマンドを実行する前に、見たいのは編集中の変更か、コミット予定の変更かを決めましょう。

比較の基準と対象の関係
HEADのコミット(比較の基準)git diff –staged:HEADを基準に比較
→
ステージングエリア
ステージングエリアgit diff:ステージングエリアを基準に比較
→
作業ツリー
HEADのコミット(比較の基準)git diff HEAD:HEADを基準に比較(未追跡ファイルは含まない)
→
作業ツリー

5. READMEの修正を確認してからコミットする

ここからは、コミット済みのREADMEがある練習用リポジトリを想定します。保存場所の説明を修正し、ファイルを保存したところから始めます。

手順1:変更されたファイルを確認する

git status

README以外にも変更があるなら、それが今回の作業に関係するかを確認します。

手順2:ステージング前の差分を読む

git diff -- README.md

対象をREADMEに絞って、追加した説明、取り除いた説明、周囲の文章を読みます。--は、オプションやコミットの指定と、ファイルの指定を区切るために使います。

手順3:変更を選んで、記録予定を確認する

git add README.md
git diff --staged

ここで見るのは、次のコミットに含まれる変更です。ほかのファイルがすでにステージングされていれば、それらも表示されるため、全体を確認します。

手順4:コミットし、残った変更を確認する

git commit -m "READMEの原稿保存先を修正"
git status

確認してから記録する、という順番を習慣にすると、意図しない変更に気づきやすくなります。ステージングとコミットの関係は、Git公式の変更記録の説明でも確認できます。Git公式:変更の記録

READMEの修正を確認してコミットする手順
  1. コミット済みのREADMEを修正して保存
    対象をつかむ ↓
  2. git status:変更されたファイルを確認
    変更の中身を読む ↓
  3. git diff — README.md:追加・削除・周囲の文章を読む
    確認した変更を選ぶ ↓
  4. git add README.md:変更をステージング
    次のコミットに含まれる変更を確認 ↓
  5. git diff –staged:ほかのステージング済みファイルも含めて確認
    確認してから記録 ↓
  6. git commit:確認した変更を記録
    記録後の状態を確認 ↓
  7. git status:残った変更を確認

6. diffが空でも、変更がないとは限らない

READMEの修正をgit addした後に、普通のgit diffを実行すると、何も表示されない場合があります。この場合は「変更が消えた」のではなく、作業ツリーとステージングエリアが一致している可能性があります。

そこでgit statusとgit diff --stagedを確認すると、コミット予定の変更が残っているかを判断できます。

さらに、ステージングした後でREADMEへ画像の保存先を追記すると、次のように分かれます。これは説明用の例です。

確認するコマンド この例で見える変更
git diff --staged 最初に選んだ、原稿の保存先の修正
git diff その後に編集した、画像の保存先の追記

追記も今回のコミットに含めたいなら、内容を確認して再びステージングします。ファイルを保存することと、次のコミットに含めることは別の操作です。Git公式:ステージング後の編集

何も表示されないときは、「どこを比べた結果が空なのか」を確認するのがポイントです。

ステージング後の編集と差分の分かれ方
原稿の保存先の修正をgit add普通のgit diffを確認
→
git diffが空の場合:作業ツリーとステージングエリアが一致している可能性
git diffが空の場合:作業ツリーとステージングエリアが一致している可能性変更が消えたと決めずに確認
→
git statusとgit diff –stagedで記録予定の変更を確認
原稿の保存先の修正をgit addさらに編集した場合
→
ステージング後に画像の保存先を追記する例
ステージング後に画像の保存先を追記する例コミット予定の変更を見る
→
git diff –staged:最初に選んだ原稿の保存先の修正
ステージング後に画像の保存先を追記する例ステージング後の変更を見る
→
git diff:その後に編集した画像の保存先の追記
git diff:その後に編集した画像の保存先の追記追記を含めたい場合
→
追記も今回のコミットに含めたいなら、内容を確認して再びステージング

7. 差分を読むときに確認したいこと

この記事のREADME修正なら、次の順で見直すと判断しやすくなります。

  1. 比較対象は、編集中の内容か、コミット予定の内容か。
  2. 変更したファイルは、今回の作業に必要なものか。
  3. 追加した説明は、実際の保存先と一致しているか。
  4. 削除した行に、残すべき説明が含まれていないか。
  5. 周囲の説明と矛盾していないか。

差分だけでは変更の理由はわかりません。理由をコミットメッセージや作業メモに残すと、あとから読む人が判断しやすくなります。

また、画像などのバイナリーファイルは、テキストのような行ごとの表示にならないことがあります。その場合は、変更前後の画像や、ファイルを開いた結果も確認します。差分表示の形式には複数の種類があります。Git公式:差分の形式

worktreeを使っている場合は、どの作業フォルダーでコマンドを実行しているかも確認してください。この確認手順は、前回の記事で分けた作業場所を取り違えないためにも役立ちます。

8. まとめと理解度確認

diffは、2つの状態を比べて、何が変わったかを読むための仕組みです。最初に比較対象を決め、追加と削除の中身を確認しましょう。

コミット前には、git statusで状態をつかみ、git diffで編集中の変更を読み、ステージング後にgit diff --stagedで記録予定を確かめる、という流れが使えます。

自分の言葉で説明してみる

  1. git statusとgit diffは、何を確認する点が違いますか?
  2. 差分本文の先頭にある-と+は、それぞれ何を示しますか?
  3. 次のコミットに含める変更を確認するコマンドは何ですか?
  4. ステージング後、普通のgit diffが空なら、変更は必ず消えていますか?
  5. 新しく作った未追跡ファイルの内容は、普通のgit diffに表示されますか?

解答例

  1. statusはファイルやステージングの状態を、diffは比較対象の変更の中身を確認します。
  2. -は前側から取り除かれた行、+は後側へ追加された行です。
  3. git diff --stagedです。git diff --cachedも同じ意味です。
  4. 消えたとは限りません。ステージング済みなら、普通のdiffが空でも記録予定の変更が残っている場合があります。
  5. 通常は表示されません。statusで存在を確認し、ステージング後にgit diff --stagedで追加内容を確認できます。

参考資料

資料確認日:2026年10月11日

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次