Git の全履歴からコードを検索する

Git の全履歴の中から、ある文言を含むコードを検索する方法。

$ git grep 【キーワード】 $(git rev-list --all)

まず、$ git rev-list --all で、全てのコミットのハッシュを取得できる。つまりこのハッシュに含まれるコードの中から git grep を使って対象のキーワードを検索する、というワケだ。

結果は以下のように表示される。

# 「create.*」を含むコードを調べる
$ git grep create.* $(git rev-list --all)

f0cfadabd5da113b45602934eddc0eb8382a1ca8:src/news.ts:const hoge = createHoge();
98283f71b2dca2a8446913c47a378acbe86ca2c9:src/user.js:createHoge().something();

「コミット ID」「: (コロン)」「ファイル名」「:」「該当するコード行」という形式。

検索キーワードには正規表現も使えるのでオススメ。