Git Diff: コミットやブランチ間の変更を比較する

git diff を使ってコミット間、ブランチ間、作業ディレクトリの変更を比較する方法を解説。コードレビューのワークフローに不可欠なコマンドです。

git diff main..feature-branch

詳細な説明

git diff は何をするのか?

git diff はリポジトリ内の2つの状態の差分を表示します。作業ディレクトリとステージングエリアの比較、2つのコミットの比較、2つのブランチの比較、特定のファイルの比較が可能です。

よく使うパターン

# 未ステージの変更(作業ディレクトリ vs. ステージングエリア)
git diff

# ステージ済みの変更(ステージングエリア vs. 最後のコミット)
git diff --staged

# 2つのブランチを比較
git diff main..feature-branch

# ブランチ間で特定のファイルを比較
git diff main..feature-branch -- src/app.tsx

# 2つのコミットを比較
git diff abc1234..def5678

出力の読み方

--- a/src/app.tsx
+++ b/src/app.tsx
@@ -10,7 +10,7 @@
 function App() {
-  const count = 0;
+  const count = useState(0);
   return <div>{count}</div>;
 }

- が付いた行は削除された行、+ が付いた行は追加された行です。@@ ヘッダーは旧バージョンと新バージョンの行番号を示します。

便利なフラグ

# 変更されたファイル名のみを表示
git diff --name-only main..feature

# ファイル名と変更タイプ(追加、変更、削除)を表示
git diff --name-status main..feature

# 行単位ではなく単語単位の差分を表示
git diff --word-diff

# 空白の変更を無視する
git diff -w

# 統計サマリーを表示する
git diff --stat main..feature

マージベースとの差分

ブランチが main から分岐して以降に導入された変更を確認するには:

git diff main...feature-branch  # ドット3つ

3つのドット構文は feature-branchマージベース(共通祖先)と比較します。コードレビュー時に通常求められるのはこの比較です。git diff をマスターすることは、何がどう変わったかを正確に理解するために不可欠です。

ユースケース

プルリクエストを提出する前に、開発者が git diff main...feature を実行して、ブランチがマージベースに対して導入したすべての変更をレビューする場面で使用します。

Try It — Git Command Builder

フルツールを開く