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 を実行して、ブランチがマージベースに対して導入したすべての変更をレビューする場面で使用します。