Git: git log -S で「この文字列を足した/消したコミット」を探す
git log -S "文字列" は、その文字列の出現回数が変わったコミット(追加・削除したコミット)だけを列挙する。関数がいつ入ったか、いつ消えたかを探すのに速い。
いつ使うか
- ある関数・設定値・定数が「いつ、どの変更で入ったか」を知りたいとき
- 消えてしまったコードがどのコミットで消されたかを探したいとき
git blameは今ある行にしか使えないが、-Sは消えた行も追える
やり方
sh
# 文字列を追加・削除したコミット(diff も表示)
git log -S "parseConfig" -p
# 特定ファイルに絞る
git log -S "MAX_RETRY" -- src/config.ts
# 正規表現で探す
git log -S "retry\(.*\)" --pickaxe-regex
# 出現回数が変わらない編集(行の書き換え)も拾いたいなら -G
git log -G "timeout\s*=" -p注意点
-Sは「出現回数が変わった」コミットだけを出す。同じ行の中で前後を書き換えただけ(回数が同じ)のコミットは出ない。それも見たいときは-G<正規表現>(diff の追加・削除行にマッチするか)を使う。- 大きなリポジトリでは全履歴を走査するので時間がかかる。パスや
--sinceで絞る。 - 行の範囲の変遷を追うなら
git log -L 10,30:path/to/fileも便利。