개발관련/Git

특정 단어에 대한 Git 커밋 차이점 또는 내용을 grep하는 방법

Rateye 2021. 12. 1. 09:41
728x90
반응형
질문 : 특정 단어에 대한 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, &regmatch, 0);
...
-    hit = !regexec(regexp, mf2.ptr, 1, &regmatch, 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
728x90
반응형