2015-11-12 12 views
9

コミット本文(コミットタイトル/メタデータではありません)にmd5hashmyfile.extensionSOME CHANGEという古いコミットがあります。私はそれぞれの差分を検査することなく、md5hashからHEADに至るまでのコミットで変更SOME CHANGEとコミットのリスト(だけでなく、存在)を生成することができますどのようにファイルの移動ブロックをファイル内で移動/削除しました

? (その中に残念ながら多くの場合現在のケースがあります)

私はgit rev-list --all | xargs git grep 'SOME CHANGE'を試しましたが、ファイル内にあるSOME CHANGEのコミットをすべて見つけたようです。

git blameは、行が変更され、SOME CHANGEが移動したために役に立たないようです。

答えて

4

私はあなたが探している答えはgit --no-pager log --pretty="%H" -G"SOME CHANGE" -- myfile.extensionだと思います。

最初はgit log -Sと思っていましたが、追加/削除のみをカバーしていました。 git log -Gはおそらくあなたが望むものに近いでしょう。ここでは-S-Gの違いを見ることができます。完全なコミットの履歴も含めておきます。本文で行ったことの説明については、コミットメッセージを読んでください。

# git --no-pager log --oneline -S"SOME CHANGE" 
12e24ed Remove text 
9427ffc Add the text 
# git --no-pager log --oneline -G"SOME CHANGE" 
12e24ed Remove text 
6a33653 Change other text on same line 
ac09bbb Append other text to same line 
484b447 Move the text two lines down 
9427ffc Add the text 
# git --no-pager log --oneline 
12e24ed Remove text 
9c7f7d5 Change text on adjacent line 
6a33653 Change other text on same line 
ac09bbb Append other text to same line 
484b447 Move the text two lines down 
377936f Add other text on adjacent line 
9427ffc Add the text 
1929648 Initial commit 

ちょうどハッシュでそれを取得するには:

# git --no-pager log --pretty="%H" -G"SOME CHANGE" 
12e24ed749e499bc2d8920c5d8a3ca98a6422e3f 
6a336532210ca85dea86968c34cef516345b8ab4 
ac09bbb5c95bbea65e7c99c730653d27f90397f4 
484b4478e4cb16c839dac558f3e958683b428a64 
9427ffc7dd60a3cfb1d9880083e6262faea0eefb 
0

これはまだ結果を通じてウェーディングのビットを必要とするが、これはあなたが近づくことがあります。

git rev-list --all | xargs git show | egrep '(^ ?[+-].*(SOME CHANGE)|^commit)' | egrep -B1 '^ ?[+-]' | uniq 

これはそれが見ていSHAを示し、その後、ラインを出してくれる、それぞれのパッチはコミットを示します一致するコードの試合に関連するシャーはマッチの上にある。

これは実行可能な方法であれば、さらに結果をクリーンアップすることができます。

0

私はあなたが探していると思う:

git log -S<string> 

ファイルで指定された文字列(すなわち、追加/削除)の発生回数を変更違いを探します。スクリプタの使用を意図しています。

構造体のようなコードの正確なブロックを探していて、ブロックが最初に入ってからそのブロックの履歴を知りたい場合に便利です。プリイメージを-Sに戻し、ブロックの最初のバージョンを取得するまで続けます。

関連する問題