따라서 foo.rb 라는 파일이 있고 bar 라는 누락 된 메서드에 대한 오류가 발생 하면 문자열 에 대한 foo.rb 기록을 검색 bar
하여 과거에 정의 된 적이 있는지 확인하고 싶습니다 .
이 Git 히스토리 모두에서 문자열을 찾았 습니까?
그러나 이것은 모든 파일을 검색합니다. 하나의 파일로 검색하고 싶습니다.
따라서 foo.rb 라는 파일이 있고 bar 라는 누락 된 메서드에 대한 오류가 발생 하면 문자열 에 대한 foo.rb 기록을 검색 bar
하여 과거에 정의 된 적이 있는지 확인하고 싶습니다 .
이 Git 히스토리 모두에서 문자열을 찾았 습니까?
그러나 이것은 모든 파일을 검색합니다. 하나의 파일로 검색하고 싶습니다.
답변:
이를 위해 -S 옵션을 사용하여 로그를 git 할 수 있습니다.
git log -S'bar' -- foo.rb
git log -G'bar' -- foo.rb
'bar'의 발생 횟수를 변경 한 커밋보다는 'bar'가 포함 된 diff를 검색합니다 (git-log 맨 페이지 참조).
-Sbar
를 검색하기 위해 사용해야 했습니다 . 어쩌면 Windows 명령 줄을 사용하여 나와 관련이있을 수 있습니다.
-G
정규식 검색을위한 것입니다. 이것도 훌륭한 참고 자료입니다 : stackoverflow.com/a/4472267/2586761
또는 아마도이 질문을 시도 할 수 있습니다 (관련 질문에서 모든 git history for string 검색 )
git rev-list --all foo.rb | (
while read revision; do
git grep -F 'bar' $revision foo.rb
done
)
실제로 파일 내용을 찾고 bar 발생에 대해 메시지 / 패치를 커밋하지 않습니다.
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 명령에 대한 재정의가 있습니다 ( manual ).
$ git log Makefile # commits that modify Makefile
그래서 당신은 사용할 수 있습니다 :
git log foo.rb | grep "bar"
--full-diff
하지 않고 (같이 더 DIFF가 표시되지 않습니다)하지 작업을 수행 -p
적어도 자식 1.7.9.5에
-- filename
로 하나의 파일로 제한하려는 경우 git 명령에 추가 할 수 있습니다 .