git diff – 変更内容を比較表示するコマンド

コマンドリファレンス

git diff コマンドは、Git リポジトリにおける変更内容を比較して表示するためのコマンドです。
ワークツリーとステージングエリア、またはコミット間の差分を確認するのに利用されます。

構文(Syntax)

git diff [オプション] [比較対象]

よく使うオプション(クイックリファレンス)

  • git diff : 編集中のファイルとステージングエリアの差分を確認する
  • git diff --staged / --cached : ステージング済みの変更と直前のコミットの差分を確認する
  • git diff HEAD : 編集中のファイルと最新コミットの差分をまとめて確認する
  • git diff HEAD~1 : 1つ前のコミットとの差分を確認する
  • git diff --stat : 変更されたファイル名と追加・削除行数の統計だけを確認する
  • git diff main..feature : ブランチ間の差分を確認する

主なオプション一覧

オプション説明使用例
(なし)ワークツリーとステージングエリアの差分を表示git diff
--staged / --cachedステージングエリアと直前のコミットの差分git diff --staged
HEAD現在の作業ツリーと最新コミットの差分git diff HEAD
HEAD~11つ前のコミットとの差分git diff HEAD~1
<commit1> <commit2>2つのコミット間の差分git diff abc123 def456
<branch1>..<branch2>ブランチ間の差分git diff main..develop
--stat差分の統計のみ表示git diff --stat
--name-only変更されたファイル名のみ表示git diff --name-only
--color-words単語単位で差分を表示git diff --color-words

実行例

ワークツリーとステージの差分を表示

git diff

出力例:

diff --git a/app.py b/app.py
index e69de29..95c6d12 100644
--- a/app.py
+++ b/app.py
@@ -0,0 +1,2 @@
+print("Hello World")
+print("New line")

ステージング済みの変更を確認

git diff --staged

最新コミットとの差分を表示

git diff HEAD

2つのコミットを比較

git diff abc123 def456

ブランチ間の差分を表示

git diff main..develop

統計のみ確認

git diff --stat

出力例:

 app.py | 2 ++
 1 file changed, 2 insertions(+)

変更されたファイル名のみ表示

git diff --name-only

出力例:

app.py
README.md

エラー例(Gitリポジトリ外で実行)

git diff

出力例:

fatal: not a git repository (or any of the parent directories): .git

出力の読み方

git diff の出力はUnified diff形式で表示されます。各行の意味を理解しておくと、差分をすばやく把握できます。

diff --git a/app.py b/app.py       # 比較対象のファイル(a=変更前 b=変更後)
index e69de29..95c6d12 100644      # Gitオブジェクトのハッシュとファイルのパーミッション
--- a/app.py                        # 変更前のファイル
+++ b/app.py                        # 変更後のファイル
@@ -0,0 +1,2 @@                    # ハンクヘッダー
+print("Hello World")               # 追加された行(+)
+print("New line")                  # 追加された行(+)

ハンクヘッダー(@@ … @@)の読み方

@@ -旧開始行,旧行数 +新開始行,新行数 @@ という形式で表示されます。

表示意味
@@ -10,5 +10,7 @@変更前は10行目から5行、変更後は10行目から7行(2行追加)
@@ -1,3 +1,0 @@変更前は1行目から3行、変更後は0行(3行削除)

行頭の記号の意味

記号意味
+追加された行
-削除された行
(スペース)変更なし(前後のコンテキスト行として表示)

よくある質問(FAQ)

git diff を実行しても何も表示されない

ワークツリーとステージングエリアに差分がない状態です。git add 済みの変更を確認したい場合は git diff --staged を使います。コミット前のすべての変更を確認したい場合は git diff HEAD が便利です。

–cached と –staged の違いは?

まったく同じ意味です。--staged は Git 1.6.1 で追加された読みやすいエイリアスで、どちらを使っても動作は変わりません。

特定のファイルだけ差分を確認したい

ファイルパスを末尾に指定します。--(ダブルダッシュ)を挟むとファイル名とオプションを明確に区別できます。

git diff -- path/to/file.py
git diff HEAD -- src/main.js

ブランチ間の差分で .. と … の違いは?

2点(..)と3点(...)で比較の起点が異なります。

  • git diff main..feature : main と feature それぞれの最新コミットを直接比較する
  • git diff main...feature : main と feature の分岐点(共通の祖先)から feature の最新コミットまでの差分を比較する

プルリクエストのレビューなど「ブランチで行った変更だけを見たい」場合は ... が便利です。

コミット前に変更内容をまとめて確認したい

git diff HEAD を使うと、ステージ済み・未ステージ両方を含む最新コミットとの全差分を一度に確認できます。コミット前の最終チェックに最適です。

差分をファイルに保存してパッチとして使いたい

リダイレクトでパッチファイルを作成できます。作成したパッチは git apply で適用できます。

git diff > changes.patch
git apply changes.patch

関連コマンド

  • git status : 変更されたファイルの状態を確認する。
  • git log : コミット履歴を一覧表示する。git log -p でコミットごとの差分も表示できる。
  • git merge : ブランチを統合する。マージ前に git diff main..feature で差分を確認しておくと安全。
  • git show : 特定のコミットの差分を表示する。

備考

  • git diffまだステージングしていない変更 を確認するのに便利。
  • git diff --staged を組み合わせると、次のコミットに含まれる内容を確認できる。
  • 差分はパッチ形式で出力され、git apply で適用可能。

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント