症状
「このコードは誰がいつ書いたのか」「特定の行の変更履歴を追いたい」ときに git blame の使い方がわからない
結論:まずこれを確認
git blame -L 行番号,行番号 ファイル名
これで特定行の最終変更者・コミットを確認できる。
操作フロー
flowchart TD
A[特定行の履歴を調べたい] --> B{調べたい範囲は?}
B -->|1行だけ| C[git blame -L n,n ファイル]
B -->|複数行| D[git blame -L n,m ファイル]
C --> E{さらに前の履歴を見たい?}
D --> E
E -->|Yes| F[git blame コミットID^ -L n,n ファイル]
E -->|No| G[完了]
F --> H{まだ遡りたい?}
H -->|Yes| F
H -->|No| G
よくある原因
- 行番号の指定方法がわからない —
-Lオプションを使う - ファイル全体が表示されて見づらい — 行範囲を絞ると解決
- 変更前のコミットを見たい — コミットID^ で1つ前を指定
- リネーム前のファイルを追えない —
-Cオプションで追跡可能 - 移動されたコードの元を知りたい —
-C -C -Cで検出範囲を拡大 - 空白変更が邪魔 —
-wオプションで無視できる - 出力が長すぎる — ページャーや行指定で絞る
操作手順
ステップ1: 対象ファイルの行番号を確認する
エディタや cat -n で行番号を確認する。
cat -n src/main.py | head -50
🔍 チェックポイント: 調べたい行の番号をメモしておく
ステップ2: 特定の1行を blame する
git blame -L 42,42 src/main.py
出力例:
a1b2c3d4 (山田太郎 2025-12-01 10:30:00 +0900 42) def calculate_total():
🔍 チェックポイント: コミットID、作者名、日時、行内容が表示される
ステップ3: 複数行の範囲を blame する
git blame -L 40,50 src/main.py
🔍 チェックポイント: 40行目から50行目までの変更履歴が表示される
ステップ4: さらに前の変更履歴を遡る
表示されたコミットの1つ前を調べる場合:
git blame a1b2c3d4^ -L 42,42 src/main.py
^はそのコミットの親(1つ前)を意味する~2で2つ前、~3で3つ前も指定可能
🔍 チェックポイント: 別のコミットIDと作者が表示されれば、さらに前の変更者がわかる
ステップ5: リネーム・移動されたコードを追跡する
ファイル名が変更されていた場合:
git blame -C -L 42,42 src/main.py
さらに別ファイルからのコピーも検出したい場合:
git blame -C -C -C -L 42,42 src/main.py
🔍 チェックポイント: 出力にリネーム元のファイル名が表示されることがある
ステップ6: 空白変更を無視して blame する
インデント変更だけのコミットを飛ばしたい場合:
git blame -w -L 42,42 src/main.py
🔍 チェックポイント: 空白だけの変更コミットがスキップされる
ステップ7: 詳細なコミット内容を確認する
blame で見つけたコミットの全体像を確認:
git show a1b2c3d4
🔍 チェックポイント: コミットメッセージと変更差分が表示される
NG行動
- 行番号を確認せずに blame を実行する — 誤った行を調べてしまう
- ファイル全体を blame して目視で探す — 時間がかかり見落としやすい
^と~を混同する —^は親、~nはn世代前。意味が異なる- 古いコミットを遡りすぎて混乱する — 必要な範囲で止める
よくある質問(FAQ)
Q1: GUI で blame を見る方法は?
A: GitHub や GitLab ではファイル表示画面の「Blame」ボタンから確認できる。VS Code なら GitLens 拡張機能が便利。
Q2: 関数名で範囲指定できる?
A: -L :関数名:ファイル名 で可能(言語によっては動作しない場合あり)。
git blame -L :calculate_total:src/main.py
Q3: blame の結果をファイルに保存したい
A: リダイレクトを使う。
git blame -L 40,50 src/main.py > blame_result.txt
関連するトラブル
準備中
解決しない場合
- Git 公式ドキュメント - git-blame
git blame --helpでオプション一覧を確認- 次に調べるキーワード:「git log -L」「git log -p」「git show」