前は確かにあった RETRY_LIMIT という設定が、いまのコードには見当たらない。いつ、どのコミットで消えたのかを知りたい。そんなときは、git log を上から1件ずつ読む前に git log -S で「その文字列の数が変わったコミット」だけに絞り込みます。
初心者向けに、正規表現の細かい書き方やオプションの組み合わせは省略します。git log と git show を使ったことがある方向けの、履歴から文字列を探す小ネタです。
確認用の履歴
確認用の一時リポジトリで git log --oneline を実行すると、次の5コミットが並びます。
7fcd99b 設定を整理
da27121 main.pyを追加
d12b033 リトライ上限を5回へ変更
71cee55 リトライ上限を追加
1e4fef8 設定ファイルを追加
config.py には、71cee55 で RETRY_LIMIT = 3 の行を追加し、d12b033 で値を 5 に書き換え、7fcd99b でその行を削除しました。da27121 は別ファイルの追加で、config.py には触れていません。
いまの config.py には TIMEOUT_SEC = 10 の1行しかなく、git grep RETRY_LIMIT で探しても何も見つかりません。現在のファイルにない文字列なので、履歴のほうを探します。
git log -Sで、追加と削除のコミットを探す
git log -S RETRY_LIMIT --oneline
出力は次のとおりです。
7fcd99b 設定を整理
71cee55 リトライ上限を追加
-S は、指定した文字列の 出現回数が変わったコミット を表示するオプションです。Gitの資料では「pickaxe(つるはし)」と呼ばれています。RETRY_LIMIT が0回から1回になった追加のコミットと、1回から0回になった削除のコミットだけが出てきました。
探していた「いつ消えたか」は、新しい側の 7fcd99b です。中身まで見たいときは -p を付けると差分も表示されます。
git log -S RETRY_LIMIT -p -1
diff --git a/config.py b/config.py
index 3e34784..f09a3d4 100644
--- a/config.py
+++ b/config.py
@@ -1,2 +1 @@
TIMEOUT_SEC = 10
-RETRY_LIMIT = 5
コミット情報の行は省略しています。-1 は表示件数を1件に絞る指定で、新しい順の先頭、つまり削除したコミットだけを表示しています。
値を書き換えたコミットは-Sに出てこない
上の結果には、3 を 5 に書き換えた d12b033 がありません。この変更では RETRY_LIMIT の行が1行消えて1行増えたので、文字列の出現回数は1回のまま変わっていないためです。
-S は「増えた・減った」を探すもので、「その文字列を含む行が変わった」を探すものではありません。 書き換えも含めて探したいときは -G を使います。
git log -G RETRY_LIMIT --oneline
7fcd99b 設定を整理
d12b033 リトライ上限を5回へ変更
71cee55 リトライ上限を追加
-G は、追加または削除された行が、指定した正規表現に一致するコミットを表示します。今回は書き換えのコミットも出てきました。
使い分けは、次のように考えると迷いにくいです。
- いつ追加されたか、いつ消えたかを知りたい:
-S - 値の変更も含めて、その文字列に関わった変更をたどりたい:
-G
何も出ないときの確認
存在しない文字列を -S で探すと、何も表示されずに終了します。今回の確認では、このときの終了コードは 0 でした。git grep のように「見つからなかったら終了コード 1」にはならないので、スクリプトで判定するときは出力が空かどうかを見ます。
何も出ないときは、次の2点を疑います。
- 大文字・小文字やスペースを含めて、文字列を正確に書いているか
- 末尾に
-- ファイル名を付けて、対象外のファイルに絞り込んでいないか
絞り込み自体は便利です。git log -S RETRY_LIMIT --oneline -- config.py のように対象ファイルを指定すると、そのファイルの変更だけから探せます。今回の例では、絞り込まないときと同じ2件が表示されました。
消えたコードを探すときは、まず git log -S 文字列 --oneline で追加と削除のコミットを見つけ、値の変更まで追いたくなったら -G に切り替えます。どちらも差分の中身で絞り込むので、コミットメッセージに文字列が書かれていなくても見つけられます。
確認環境・参考資料
2026年11月、Windows/Git Bash/Git 2.54.0.windows.1 の一時リポジトリで確認しました。上記の5コミットを作り、-S と -G の表示の違い、-- config.py を付けたときの表示、存在しない文字列での無出力と終了コード 0、git grep で現在のファイルに文字列がないことを確認しています。