31

非常に特定の変数名に関連するgit履歴の変更を検索しようとしています。

私はこれをやってみました:

git diff HEAD~25000 | grep -in mydistinctvariablename

結果は、結果行がどのコミットからのものかを教えてくれず、かなりの時間(約5〜7分)かかります。

誰かがより良い解決策、時間、結果を持っていますか?

4

1 に答える 1

48

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が、これは大幅に遅くなります。

于 2012-06-17T06:53:09.333 に答える