2012-12-03 9 views
31

特定のファイルに特定のコード行がどのコミットから導入されているかをGITが知ることは可能でしょうか?これは、その行が追加されて以来、多くのコミットがあったことを前提としています。または、行が存在するファイルのすべてのコミットのgit blameを見ながらスクリプトで行う必要があるものですか?Git blame committed行

オリジナルファイル - を明確にするために、>ラインを追加しましたが、ファイルとコミットする - >他の多くのコミット、その後、他の行を追加し、それが追加されていますので、ラインが変更されていないと仮定すると、コード

答えて

29

次の行は、あなたにも--reverse使用することができます

を変化させた場合のSHA1番号を取得するためにgit blame -l filenameを使用することができます。

--reverse

ウォークフォワード歴史の代わりに、後方を。行が現れたリビジョンを表示する代わりに、行が存在する最後のリビジョンを表示します。これにはSTARTのような改訂の範囲が必要です。

http://www.kernel.org/pub/software/scm/git/docs/git-blame.html

+0

これは正しい方向に私を連れて行きます。 Lは、行または行の範囲を追跡できるgitの責任に対する議論であるようです。私はもう少し調べて、私の所見を掲載します。 –

+0

私の編集を参照してください。範囲を逆にして-Lを使用すると、コミットを受け取ります。 – phschoen

+0

-Lを使用すると、上にコミットが見つかりました。私が--reverseを使用した場合、私はそれが同様に助けになると確信しています。ありがとう。 –

2

を変更単純に:

git blame <that file>を入力して、その後に表示される行を探します。

ラインは、あなたがまだgit blame最後の行が変更されたコミットを見つけ、その後、git checkout <sha>~1することができ、それが追加されていますので、変更されている場合(shaは元git blameに表示SHAです)とgit blame再度その行の履歴に戻ってください。

+0

上記の説明を追加しました。私は多くのコミットが終わった後でそれを見つけたいと思っています。そうでなければ、私はちょうどあなたが言ったようにgitの責任を行う。 –

+0

これは私にその行を導入したコミットを与えるものではないようです。むしろ、私はgit blameを使用して、それを自分自身で見つける必要があります。私はGITが私のためにこれを見つけることができると期待していた。 –

+0

私は 'git blame'ファイルを継続的に探し、手動で行を見つける以外の方法は知らない。私はGitが自動的にその方法を持っているとは思わない。 –

0

を参照してくださいあなたがファイルをチェックするためにgitのログ-Lを使用することができそうです。 は例えば、私は55から60にfile.cと、ラインのコミットを確認したい:

git log -L55,60:file.c 
2

あなたは、このような特定のコード列に対して非難することができます。

git log -S 'THE-CODE' 
関連する問題