git blame 使い方

ファイルの各行がどのコミットのものか調べる

file.txt に対して

git blame file.txt

とすると、 各行毎にコミットのハッシュ値、著者、時間が表示される。

git blame の出力を変更する

-f
コミットのファイル名を表示する
-s
著者とタイムスタンプを表示しない
-l
ハッシュ値を短縮しないで表示する

行番号で指定した範囲の各行がどのコミットのものか調べる

「-L」オプションで範囲を指定できる。 行番号で指定するには数字を二つコンマで区切って指定する。 また、「+」と「-」を使ってオフセットを指定できる。

git blame -L 5 file.txt
git blame -L ,5 file.txt
git blame -L 5,10 file.txt
git blame -L 5,+3 file.txt
git blame -L 5,-3 file.txt

のように使う。それぞれ

  • 5行目からファイルの末尾まで
  • ファイルの先頭から5行目まで
  • 5行目から10行目まで
  • 5行目から3行
  • 5行目までの3行

となる。

正規表現で指定した範囲の各行がどのコミットのものか調べる

「-L」オプションは行番号だけでなく、 スラッシュで囲んだ正規表現を指定することもできる。

git blame -L /ABC/,/DEF/ file.txt
git blame -L ,/ABC/ file.txt
git blame -L /ABC/ file.txt

のように使う。それぞれ

  • /ABC/ にマッチする行から /DEF/ にマッチする行まで
  • ファイルの先頭から /ABC/ にマッチする行まで
  • /ABC/ にマッチする行からファイルの末尾まで

となる。

行の移動やコピーを見つけて、各行がどのコミットから来ているのか調べる

「-M」オプションを加えて実行する。

git blame -M file.txt

ファイル間の行の移動やコピーを見つけて、各行がどのコミットから来ているのか調べる

「-C」オプションを2つつける。

git blame -C -C file.txt

git annotate について

git annotate <FILE>

とすると各行のコミットの情報が表示される。 git annotate は git blame とほぼ同じで下位互換と他の SCM のコマンド名と似せるために用意されている。 また、

git blame -c <FILE>

とすると同じ出力を得る。

参考

  • man git-blame

Tags of current page