git 上で削除したファイルがコード内で利用されているかどうか調べるためのワンライナー

削除したファイルが 1 つ 2 つだったら使われているかどうかを調べるために素朴に grep すればいいんだけど、大量にあるときつい。ので手軽に調べられるワンライナーを書いてみた。

git log <commit_hash>...<commit_hash> --diff-filter=D --name-only --oneline | grep -Eo '[^/]+$' | xargs -I arg git grep arg

細かく解説すると以下のような動き

  • git log <commit_hash>...<commit_hash> --diff-filter=D --name-only --oneline でコミット間で削除されたファイルの一覧を出す
  • ↑だとフルパスが出てくるけど、コード内で相対パスで参照されることがあるのでgrep -Eo '[^/]+$' でファイル名のみを取り出す
  • xargs -I arg git grep arg でファイル名ごとに git grep

git grep しまくるのでファイル数が増えるとかかる時間が指数関数的に増加していくけど、手元で試したかぎりは300ファイルくらいならまぁめちゃくちゃ時間がかかるという感じでもなかった。(コードの規模にもよるけど…)