2012-08-17 3 views
5

gitプロジェクト内で、1000回のコミットを繰り返し、何度も何度も再訪問したクラスを想像してみてください。特定のコード行が正確に(どのコミットで)クラスに導入されたかを調べる機会はありますか?どのようなコミットがgitで特定の行が導入されたかを見つける方法はありますか?または、より良い選択肢がありますか?

もしそうでなければ、私が特に関心を持っている行の集合を見つけるために各コミットに行くのに代わる方法がありますか?

Ty。

答えて

3

特定のコードが導入されたときにgit bisectを使用してバックトラックすることができます(http://git-scm.com/book/en/Git-Tools-Debugging-with-Gitを参照)。この方法を使用してコードを毎回チェックし、その行がまだ存在するかどうかを調べることができます。行が編集最後がある場合、これはあなたがgit blameを使用することができ、あなたが知りたい場合は、あなたに多くの時間を節約し、検索はO(nをログ)ではなくO(n)の、...

になります。

+2

gitで特定の文字列履歴を検索する方法があります。実際はかなり簡単です。詳細は私の答えをチェックしてください。 – Christopher

+0

ニース!それでも、最初に導入されたときの線の見た目(またはその一部)を知る必要があります。 –

+0

間違いなく真実ですが、私はそれを私の知っているgitツールボックスでもっとも有用なコマンドの1つと考えています。 – Christopher

10

特定のコード行はありますか?あなたはラインが前もって何であるか知っていますか?確かに可能です。実際、それは簡単なことです。ただ、git log上のつるはし検索オプションを使用する:あなたは、特定のファイルに制限したい場合は

git log -S"public class Foo" 

-S<string> 
    Look for differences that introduce or remove an instance of <string>. Note that this is different than the string simply appearing in diff output; 
    see the pickaxe entry in gitdiffcore(7) for more details. 

は、クラスがpublic class Foo {あるとし、あなたはすべてのはでその文字列を触れたそのコミット見つけることができます

:これを使用し、一般的に

git log -S"public class Foo" -- Foo.java 

:、ちょうど標準--構文を使用します

git log -S<string> [-- <file>] 
関連する問題