だから私は、ファイルが呼び出されている場合はfoo.rb、それは私と呼ばれる欠け方法の誤差与えているバーを、私はの歴史検索したいので、foo.rbを文字列のためbar
、それが過去に定義されていたかどうかを確認します。
私はこれが見つけ、文字列のためのGitの歴史のすべてを検索しますか?
しかし、これはすべてのファイルを検索します。1つのファイルで検索したいだけです。
だから私は、ファイルが呼び出されている場合はfoo.rb、それは私と呼ばれる欠け方法の誤差与えているバーを、私はの歴史検索したいので、foo.rbを文字列のためbar
、それが過去に定義されていたかどうかを確認します。
私はこれが見つけ、文字列のためのGitの歴史のすべてを検索しますか?
しかし、これはすべてのファイルを検索します。1つのファイルで検索したいだけです。
回答:
この目的のために、-Sオプションを使用してgit logを実行できます。
git log -S'bar' -- foo.rb
git log -G'bar' -- foo.rb
、 'bar'の出現回数を変更したコミットではなく、 'bar'を含む差分を検索するには(git-logのマンページを参照)。
-Sbar
してbarを検索する必要がありました。たぶん、それは私がWindowsのコマンドラインを使用して何かをしていることに関係しています。
-G
これは正規表現検索用です...これも素晴らしいリファレンスです:stackoverflow.com/a/4472267/2586761
または、これを試すことができます(関連する質問から、すべてのgit履歴でstringを検索してください)
git rev-list --all foo.rb | (
while read revision; do
git grep -F 'bar' $revision foo.rb
done
)
実際にはファイルの内容を探し、バーが発生してもメッセージやパッチをコミットしません。
for /F %i in ('git rev-list --all foo.rb') git grep -F bar %i foo.rb
ファイル名または検索フレーズにスペースがある場合は、二重引用符に注意してください)
for /F %i in ('git rev-list --all foo.rb') do git grep -F bar %i foo.rb
(ファイル名または検索フレーズにスペースが含まれている場合は、二重引用符に注意してください)
git logコマンドのオーバーライドがあります(手動から):
$ git log Makefile # commits that modify Makefile
だからあなたは使うことができます:
git log foo.rb | grep "bar"
--full-diff
せずに(なし差分が示されていない、のように)作業をしない-p
少なくともgitの1.7.9.5に、
-- filename
までに、1つのファイルに制限したい場合は、一連のgitコマンドに追加できます。