Git Blame: 各行の変更者と変更履歴を追跡する
git blame を使ってファイルの各行を最後に変更した人物、変更日時、コミットを確認する方法を解説。コードの履歴と文脈を理解するために不可欠です。
git blame -L 10,20 src/app.tsx詳細な説明
git blame は何をするのか?
git blame はファイルの各行に、その行を最後に変更したコミットハッシュ、著者、日付を注釈として付けます。特定のコードの背景にある履歴を理解するための調査ツールです。
基本的な使い方
# ファイル全体の blame
git blame src/app.tsx
# 特定の行範囲の blame
git blame -L 10,20 src/app.tsx
# 特定の関数から始まる blame(正規表現)
git blame -L '/function App/,/^}/' src/app.tsx
出力フォーマット
a1b2c3d4 (Jane Doe 2025-03-15 14:22:01 +0000 10) function App() {
f4e5d6a7 (John Smith 2025-04-02 09:11:33 +0000 11) const [count, setCount] = useState(0);
a1b2c3d4 (Jane Doe 2025-03-15 14:22:01 +0000 12) return <div>{count}</div>;
空白やフォーマット変更を無視する
大規模なフォーマット変更コミットは、有意義な blame データを隠してしまうことがあります。-w を使って空白を無視できます:
git blame -w src/app.tsx
大規模なフォーマット変更コミットがあるプロジェクト(例:初めて Prettier を実行した場合)では、.git-blame-ignore-revs ファイルを作成します:
# .git-blame-ignore-revs
# Prettier reformatting
a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
git config blame.ignoreRevsFile .git-blame-ignore-revs
より深く調べる
ある行を変更した完全なコミットを見るには:
git blame src/app.tsx
# ハッシュを確認してから:
git show a1b2c3d4
ヒント
git blame は責任を追及するためのものではなく、コンテキストを理解するためのものです。コードの意味がわからない行を見つけたら、blame がそれを導入したコミットメッセージとプルリクエストを明らかにし、コードの「なぜ」を教えてくれます。git log -p と組み合わせれば、全体像が見えてきます。
ユースケース
開発者が共有モジュール内の意味がわからないロジックに遭遇し、git blame を使って元のコミットとそれに関連するプルリクエストを見つけてコンテキストを理解する場面で使用します。