1000 回のコミットが行われ、何度も再アクセスされた git プロジェクト内のクラスを想像してみてください。特定のコード行がクラスに導入された正確な時期 (コミット時) を調べる機会はありますか?
そうでない場合、私が特に興味を持っている行のセットを見つけるために各コミットに行く代わりの方法はありますか?
タイ。
1000 回のコミットが行われ、何度も再アクセスされた git プロジェクト内のクラスを想像してみてください。特定のコード行がクラスに導入された正確な時期 (コミット時) を調べる機会はありますか?
そうでない場合、私が特に興味を持っている行のセットを見つけるために各コミットに行く代わりの方法はありますか?
タイ。
特定のコード行?事前にラインが何であるか知っているように?確かにそれは可能です。実際、それはばかげた簡単です。つるはし検索オプションを使用するだけgit log
です:
-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"
特定のファイルに制限したい場合は、標準の--
構文を使用してください。
git log -S"public class Foo" -- Foo.java
一般に、これを使用します。
git log -S<string> [-- <file>]
git bisect
特定のコードが導入されたときにバックトラックするために使用でき ( http://git-scm.com/book/en/Git-Tools-Debugging-with-Gitを参照)、この手法を使用して毎回コードをチェックアウトし、行がまだ存在するかどうかを確認します。これにより、検索が O(n) ではなく O(log n) になり、時間を大幅に節約できます...
行が最後にいつ編集されたかを知りたい場合は、 を使用できますgit blame
。