コードの一部 (1 行のみ) をコミットまで追跡しようとしています。
非難を使用すると、問題のこの行が抽出メソッド スタイルのリファクタリングの一部として移動されたコミットが示されるだけです。
特定のテキストがコードベースに初めて存在する場合、コミットに到達するためにどのような手法を使用できますか?
このgitへの回答に記載されているように、文字列を導入したコミットを見つけるには、単純に使用できます
git log -S <line>
# or
git log -G <regex>
リポジトリ内のコード行の最初の出現を見つける。
の公式 Linux カーネル Git ドキュメントからlog
:
-S<string>
のインスタンスを導入または削除する違いを探します
<string>
。これは単に diff 出力に表示される文字列とは異なることに注意してください。詳細については、gitdiffcore (7)のつるはしのエントリを参照してください。-G<regex>
追加または削除された行が指定された と一致する違いを探し
<regex>
ます。
私は通常、指定されたテキストをgit log -p filename
検索します ( を押します)。/
このようにして、その行の変更に気付き、テキストが過去に変更された場合に (わずかに) 異なるテキストを検索し続けることができます。
私はおそらく次のように解決します:
function allcommits {
git rev-list --reverse HEAD
}
for i in `allcommits` ;do
git co -f $i 2>/dev/null ;
echo commit:$i ;
git grep -q 'that line of code' && break
done
最初のコミットから始めてすべてのコミットをチェックアウトし、一致するものが見つかるまで、各ステップですべてのファイルをスキャンします。