질문 : 특정 단어에 대한 Git 커밋 차이점 또는 내용을 grep하는 방법
Git 코드 저장소에서 특정 단어가 포함 된 모든 커밋을 나열하고 싶습니다. 나는 이것을 시도했다
git log -p | grep --context=4 "word"
하지만 파일 이름을 반드시 돌려주는 것은 아닙니다 (검색 한 단어에서 5 줄 미만이 아닌 경우는 제외).
git grep "word"
그러나 그것은 나에게 역사가 아닌 현재 파일만을 제공합니다.
특정 단어의 변경 사항을 추적 할 수 있도록 전체 기록을 검색하려면 어떻게합니까? 변경 사항을 추적하기 위해 코드베이스에서 단어 발생을 검색하려고합니다 (파일 기록에서 검색).
답변
커밋 메시지 에 주어진 단어가 포함 된 모든 커밋을 찾으려면 다음을 사용하십시오.
$ git log --grep=word
파일 내용 에서 "word"가 추가되거나 제거 된 모든 커밋을 찾으려면 (정확히 말하면 "word"발생 횟수가 변경된 위치), 즉 커밋 내용을 검색하려면 소위 ' 곡괭이 검색
$ git log -Sword
현대 Git에는 또한
$ git log -Gword
추가되거나 제거 된 줄이 "단어"와 일치하는 차이점 을 찾습니다 (또한 내용 을 커밋).
-G
는 기본적으로 정규식을 허용하고 -S
--pickaxe-regex
사용하여 정규식을 허용하도록 수정할 수 있습니다.
-S<regex> --pickaxe-regex
및 -G<regex>
차이점을 설명하려면 동일한 파일에서 다음과 같은 diff가있는 커밋을 고려하십시오.
+ return !regexec(regexp, two->ptr, 1, ®match, 0);
...
- hit = !regexec(regexp, mf2.ptr, 1, ®match, 0);
git log -G"regexec\(regexp"
는이 커밋을 표시하지만 git log -S"regexec\(regexp" --pickaxe-regex
는 해당 문자열의 발생 횟수가 변경되지 않았기 때문에) 표시되지 않습니다.
Git 2.25.1 (2020 년 2 월)에서는 해당 정규식에 대한 설명서가 명확 해졌습니다.
Martin Ågren (``)의 커밋 9299f84 (2020 년 2 월 6 일)를 참조하십시오. (Merged by Junio C gitster
- gitster-in commit 0d11410 , 12 Feb 2020)
diff-options.txt : 예제에서 "정규식"오버로드 방지 \
보고자 : Adam Dinwoodie
서명자 : Martin Ågren
검토 자 : Taylor Blau
-G
와 -S
--pickaxe-regex
사용)의 차이를 예시 할 때 "regexec", "regexp", "regmatch"등을 포함하는 git diff
호출 예제를 사용하여 수행합니다.
예제는 맞지만, 우리의 요점을 명확히하는 데 꼭 필요한 경우가 아니라면 "regex. *"작성을 피함으로써 쉽게 풀 수 있습니다.
대신에 만들어지고 비정규적인 단어를 사용하십시오.
git diff
문서 에는 이제 다음이 포함됩니다.
-S<regex> --pickaxe-regex
및 -G<regex>
차이점을 설명하려면 동일한 파일에서 다음과 같은 diff가있는 커밋을 고려하십시오.
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);
git log -G"frotz\(nitfol"
은이 커밋을 표시하지만 git log -S"frotz\(nitfol" --pickaxe-regex
는 표시하지 않습니다 (해당 문자열의 발생 횟수가 변경되지 않았기 때문에).
출처 : https://stackoverflow.com/questions/1337320/how-to-grep-git-commit-diffs-or-contents-for-a-certain-word
'개발관련 > Git' 카테고리의 다른 글
Git 관리 프로젝트의 모든 로컬 변경 사항을 이전 상태로 되돌리는 방법 (0) | 2021.12.01 |
---|---|
Pretty Git 분기 그래프 (0) | 2021.12.01 |
삭제 된 원격 브랜치로 origin에서 가져 오는 방법 (0) | 2021.12.01 |
LF를 CRLF로 대체하는 Git (0) | 2021.12.01 |
GitHub 저장소에서 단일 폴더 또는 디렉토리 다운로드 (0) | 2021.11.30 |