git blame
ファイルの各行が誰によって・いつ・どのコミットで変更されたかを表示します。コードの変更履歴を行単位で追跡するときに使います。
git blame [options] <ファイル> git blame は、ファイルの各行がどのコミットで・誰によって・いつ変更されたかを1行ずつ表示するコマンドです。「このコードは誰が書いたのか」「なぜこの実装になっているのか」を調べる最初の一歩として使われます。
基本的な使い方
# ファイル全体の変更履歴を行単位で表示
git blame src/auth.js
出力例
a1b2c3d4 (Taro Yamada 2025-06-12 14:30:00 +0900 1) function login(user, password) {
a1b2c3d4 (Taro Yamada 2025-06-12 14:30:00 +0900 2) // 認証処理
f9e8d7c6 (Hanako Sato 2025-06-20 10:15:00 +0900 3) if (!user) return false;
a1b2c3d4 (Taro Yamada 2025-06-12 14:30:00 +0900 4) return user === 'admin';
a1b2c3d4 (Taro Yamada 2025-06-12 14:30:00 +0900 5) }
出力は左から順に「コミットハッシュ(省略形)」「著者名」「日時」「行番号」「行の内容」です。同じコミットハッシュが並んでいる行は、そのコミットでまとめて追加・変更されたことを意味します。
行範囲を絞り込む
ファイルが大きい場合は、調べたい範囲だけを指定できます。
# 10行目から20行目までを表示
git blame -L 10,20 src/auth.js
# 関数名を起点にして範囲を指定する
git blame -L /function login/,+10 src/auth.js
空白の変更を無視する
インデント調整やフォーマッタの実行だけで行われたコミットが表示され、本質的な変更者を追いづらいことがあります。-w オプションで回避できます。
git blame -w src/auth.js
著者やメールアドレスで確認する
# メールアドレスで著者を表示する
git blame --show-email src/auth.js
# 特定期間の変更だけに絞る
git blame --since="2週間前" src/auth.js
GUI ツールとの対応
コマンドラインの git blame は行数が多いファイルだと読みづらいため、日常的には GUI・エディタ拡張を使うことも多いです。
| ツール | 概要 |
|---|---|
| VSCode + GitLens | 各行の末尾に著者・日時をインラインで表示。ホバーで詳細やコミット全体の差分も確認できる |
| GitHub の Blame ビュー | リポジトリのファイル画面右上の「Blame」ボタンから同様の表示ができる |
git gui blame(Git 標準) | Tk ベースの GUI で blame 結果をブラウズできる |
これらはいずれも内部的に git blame と同じ情報を使っています。
git log -S との使い分け
「特定の文字列がいつ追加・削除されたか」を調べたい場合は git log -S も候補になります。
| コマンド | 単位 | 用途 |
|---|---|---|
git blame | 行単位 | 今そこにある行が、最後に誰によって変更されたかを知りたい |
git log -S <文字列> | コミット単位 | 過去のどこかで特定の文字列が追加・削除されたコミットを探したい |
「今の行の責任者を知りたい」なら git blame、「あるキーワードの変更履歴を追いたい」なら git log -S を使うと目的に合った調査ができます。
ヒント
git blameはファイルのリネームを追跡しないことがあります。追跡したい場合は-C(コピー検出)や-M(移動検出)オプションを併用します。- 大きなリファクタリングコミットが blame の結果を埋め尽くしてしまう場合は、
.git-blame-ignore-revsファイルにそのコミットハッシュを記載し、git config blame.ignoreRevsFile .git-blame-ignore-revsを設定すると無視できます。