git diffを使いこなす:コミット前、ブランチ間、特定のファイルの差分確認テクニック

開発・ビルド

Gitでバージョン管理を行う上で、「どこがどう変更されたのか」を正確に把握することは非常に重要です。そのための基本コマンドが git diff です。

しかし、単に git diff と打つだけでは、「ステージング(git add)した後の変更が見えない」「別のブランチとの違いが分からない」といった壁にぶつかることがあります。

本記事では、実務で頻繁に使用する git diff の実践的な使い方を、シチュエーション別に解説します。

1. コミット前の差分を確認する(基本中の基本)

ファイルを編集した後、まだ git add していない(ワークツリーにある)変更内容を確認するには、オプションなしの git diff を使用します。

# ワークツリー(作業ディレクトリ)とインデックス(ステージングエリア)の差分
git diff

1-1. 特定のファイルだけの差分を見る

プロジェクト全体の差分ではなく、特定のファイル(例えば index.html)の変更だけを確認したい場合は、ファイルパスを指定します。

git diff index.html

1-2. ステージング(git add)した後の差分を見る

git add を実行してファイルをインデックスに登録した後は、単なる git diff では差分が表示されなくなります。この状態(コミットする直前)の変更を確認するには、--cached(または --staged)オプションが必要です。

# インデックス(ステージングエリア)と最新のコミット(HEAD)の差分
git diff --cached

実務では、「コミットメッセージを書く前に、これからコミットする内容を最終確認する」ために非常に頻繁に使われます。

2. 過去のコミットとの差分を確認する

現在の作業状態と、過去の特定のコミットとの違いを確認したい場合のテクニックです。

2-1. 最新のコミット(HEAD)との差分

「今作業している内容は、最後にコミットした状態からどう変わったか」を全体的に見たい場合は HEAD を指定します。

# ワークツリーと最新コミット(HEAD)の差分
git diff HEAD

2-2. 任意のコミット間の差分

「コミットA」から「コミットB」の間で何が変わったのかを確認するには、2つのコミットID(ハッシュ値)を指定します。

# コミットA と コミットB の差分(Aを基準にBがどう変わったか)
git diff [コミットID_A] [コミットID_B]

# 例:
git diff a1b2c3d e4f5g6h

順番が重要で、「古いコミット」を先に、「新しいコミット」を後に書くのが一般的です。

3. ブランチ間の差分を確認する

開発ブランチ(feature)での作業が終わり、メインブランチ(main)にマージする前に、「全体としてどのような変更が加わるのか」を確認するシーンです。

# main ブランチと feature ブランチの差分
git diff main feature

このコマンドは、main ブランチの最新状態と、feature ブランチの最新状態を直接比較します。

3-1. マージされる変更だけを見る(…構文)

実務でより安全なのは、3つのドット(...)を使った比較です。

# main ブランチから分岐した時点から、feature ブランチで行われた変更だけを見る
git diff main...feature

単なる git diff main feature だと、main ブランチ側で新しく進んだコミット(他の人がマージした変更など)も差分として表示されてしまい、見づらくなることがあります。... を使うことで、「自分がこのブランチで純粋に追加した変更」だけを確認できます。

4. 実務で役立つ便利なオプション

差分の出力結果を見やすく、または要約して表示するためのオプションです。

4-1. 変更されたファイルの一覧だけを見る(–name-only)

大量のファイルが変更された場合、差分の中身を見る前に「どのファイルが変更されたのか」だけをリストアップしたい時に使います。

# 変更されたファイル名のみを出力
git diff --name-only

4-2. 変更の統計情報(追加・削除の行数)を見る(–stat)

「どのファイルが、どれくらいの規模(行数)で変更されたのか」を俯瞰したい場合に便利です。

# 変更されたファイルと、追加/削除された行数のサマリーを出力
git diff --stat

4-3. 単語単位での差分を見る(–word-diff)

通常の git diff は「行単位」で差分を表示しますが、文章の微細な修正(タイポの修正など)では分かりにくいことがあります。--word-diff を使うと、行の中の「どの単語が変わったか」をハイライトしてくれます。

# 単語単位で差分をハイライト
git diff --word-diff

まとめ

git diff は、オプションや比較対象の指定方法を覚えることで、単なる「差分表示ツール」から「安全なコミット・マージのための強力な確認ツール」へと進化します。

  1. コミット前: git diff(add前)と git diff --cached(add後)を使い分ける。
  2. ブランチ間: git diff main...feature で純粋な変更箇所だけを確認する。
  3. 俯瞰する: --name-only--stat で変更の全体像を把握する。

これらのテクニックを日常的に使うことで、意図しない変更をコミットしてしまうミスを大幅に減らすことができます。

Bash玄

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

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

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

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

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

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

Bash玄をフォローする

コメント