2012-06-17 5 views
18

非常に特定の変数名に関する私のgitの履歴の変更を検索しようとしています。私はこれをやってみましたGitすべての差分を検索

git diff HEAD~25000 | grep -in mydistinctvariablename 

結果は私に教えていない結果行をコミットするからであり、それは時間(約5-7分)のかなりかかります。

もっと良い解決策、時間、結果が得られる人はいますか?

+2

gitの歴史をgrep(検索する方法)の可能な複製?](http://stackoverflow.com/questions/2928584/how-to-grep-search-the-git-history) –

+0

コマンドは検索結果がどのリビジョンから来たのかを教えてくれます。変更があったファイルだけが –

+0

です。私の場合は、結果のファイル名の前にSHAがあります。私は最初の答えで最初のコマンドを使用しました。 [第2の回答](http://stackoverflow.com/a/2928721/211563)あなたが探しているものが多分ありますし、SHAも与えられます(あなたのログフォーマットに表示されていれば)。 –

答えて

27

git logは、通常、コミット履歴を調べるときに使用するコマンドです。 git log --grepは、コミットメッセージの正規表現を検索するために使用できます。導入したりのインスタンスを削除違いを

-S 、ルック:あなたがした後は何

は、正規表現とそれを検索コミット単にコンテンツやgit log -Gを検索するgit log -Sです。これは単純にdiff出力に現れる文字列とは異なることに注意してください。詳細については、gitdiffcore(7)のpickaxeエントリを参照してください。

ので、例えば、msysGitリポジトリに私が使用したTcl 8.5.8を導入しているコミットを見つけることができ、次のいずれかだけコミットメッセージにまたはとして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 

ます唯一のコミットの差分に発生したことを文字列を見てやりたい:

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ログのマニュアルをよく読んで、できること全てを理解してください。あなたは本当に、あなたが代わりに-S-Gオプションを使用する必要がありますが、これはかなり遅くなります定期的にあなたに似た表現の例を使用してコンテンツを検索する場合 - -Sだけの単純な文字列の違いを探していること

は注意してください。

+0

最初のスニペットで、 'd938476 Make \' NO_SFX = 1 portable-release.sh \ 'work'という行が混乱している場合、最初のスニペットが2番目のスニペットであることを示唆しています(言い換えれば、その行がサンプル出力から削除されていればもっと明確になると思っています...) – acdcjunior

関連する問題