Git で過去のコミットを含めてソースコードを Grep する
「昔あんなコードを書いた記憶があるけど、今のコード内からは削除してしまっているなぁ…」なんていう時に、過去のコミット中のソースコードに対して Grep したくなる。そのやり方。git rev-list
と git grep
を併用する。
- 現在チェックアウトしているブランチの過去コミットを Grep する
$ git rev-list HEAD | xargs git grep '検索文字列'
# 出力例 … こんな感じでコミット ID とファイルパス・そして該当した行が出力される
$ git rev-list HEAD | xargs git grep "require('express')"
5b845f7c6499bf1953b86d1bcaf0a03f2486f2ed:src/pages/blog/2018/05/12-02.md:const express = require('express');
e4d6d788aa8adb2e3fa4d597b0ff569afff9019d:src/pages/blog/2018/12/05-01.md:const express = require('express');
- 指定ブランチの過去コミットを Grep する
$ git rev-list 【ブランチ名】 | xargs git grep '検索文字列'
- 全ブランチの過去コミットから Grep する
- 過去記事でも似たコードを紹介してました : Git の全履歴からコードを検索する
$ git rev-list --all | xargs git grep '検索文字列'
- 関連する過去記事 : 特定のコミット ID のコミット情報を調べるなら git show
以上。