非常に特定の変数名に関連するgit履歴の変更を検索しようとしています。
私はこれをやってみました:
git diff HEAD~25000 | grep -in mydistinctvariablename
結果は、結果行がどのコミットからのものかを教えてくれず、かなりの時間(約5〜7分)かかります。
誰かがより良い解決策、時間、結果を持っていますか?
git logは通常、コミット履歴を調べるときに使用するコマンドです。git log --grep
コミットメッセージで正規表現を検索するために使用できます。
あなたがgit log -S
求めているのは、コミットコンテンツを単純git log -G
に検索するか、正規表現で検索するかです。
-S のインスタンスを導入または削除する違いを探します。これは単に diff 出力に表示される文字列とは異なることに注意してください。詳細については、gitdiffcore(7) のつるはしのエントリを参照してください。
たとえば、msysGit リポジトリでは、次のいずれかを使用して Tcl 8.5.8 を導入したコミットを見つけることができます。
C:\src\msysgit\src>git log --oneline --grep "8\.5\.8"
d938476 Make `NO_SFX=1 portable-release.sh` work
ef1dc94 Update tk to version 8.5.8
a910049 Update tcl to version 8.5.8
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list
コミットメッセージで8.5.8を探しただけか、コミットされた差分でのみ発生した文字列を見てやりたいように:
C:\src\msysgit\src>git log --oneline -S"version=8.5.8"
7be8622 tcltk: update release.sh script for tcl/tk 8.5.9
a702d7f tcltk: update to 8.5.8 and exclude release.sh from the cleanup list
サンプルにある範囲制限は、ここでも使用して、検査するコミットを制限できます。git log マニュアルを注意深く読んで、できることすべてをよく理解してください。
単純な文字列の違いを探すだけであることに注意して-S
ください。例のような正規表現を使用してコンテンツを検索したい場合は、-G
代わりにオプションを使用する必要があります-S
が、これは大幅に遅くなります。