개발관련/Git

Git 기록에서 커밋 된 코드를 grep (검색)하는 방법

Rateye 2022. 2. 1. 14:19
728x90
반응형
질문 : Git 기록에서 커밋 된 코드를 grep (검색)하는 방법

과거에 파일 또는 파일의 일부 코드를 삭제했습니다. 커밋 메시지가 아닌 콘텐츠에서 grep 할 수 있습니까?

매우 좋지 않은 해결책은 로그를 grep하는 것입니다.

git log -p | grep <pattern>

그러나 이것은 커밋 해시를 즉시 반환하지 않습니다. 나는 git grep 을 사용하여 아무 소용이 없었습니다.

답변

커밋 내용 (즉, 커밋 메시지 등이 아닌 실제 소스 라인)을 검색하려면 다음을 수행해야합니다.

git grep <regexp> $(git rev-list --all)

git rev-list --all | xargs git grep <expression> 은 "Argument list too long"오류가 발생하면 작동합니다.

검색을 일부 하위 트리 (예 : "lib / util")로 제한하려면 rev-list 하위 명령과 grep 에도이를 전달해야합니다.

git grep <regexp> $(git rev-list --all -- lib/util) -- lib/util

regexp 대한 모든 커밋 텍스트를 grep합니다.

두 명령 모두에서 경로를 전달하는 이유는 rev-list lib/util 대한 모든 변경 사항이 발생한 개정 lib/util 에서만 검색 grep 에 전달해야하기 때문입니다.

다음 시나리오를 상상해보십시오. grep rev-list 의해 반환 된 동일한 개정판에 포함 된 다른 파일 <regexp> 를 찾을 수 있습니다 (해당 개정판에서 해당 파일에 변경 사항이없는 경우에도).

출처를 검색하는 다른 유용한 방법은 다음과 같습니다.

정규식 정규식과 일치하는 텍스트에 대한 작업 트리 검색 :

git grep <regexp>

정규식 regexp1 또는 regexp2와 일치하는 텍스트 행에 대한 작업 트리 검색 :

git grep -e <regexp1> [--or] -e <regexp2>

작업 트리에서 정규식 regexp1 및 regexp2와 일치하는 텍스트 행을 검색하여 파일 경로 만보고합니다.

git grep -l -e <regexp1> --and -e <regexp2>

작업 트리에서 정규식 regexp1과 일치하는 텍스트 줄과 정규식 regexp2와 일치하는 텍스트 줄이있는 파일을 검색합니다.

git grep -l --all-match -e <regexp1> -e <regexp2>

작업 트리에서 변경된 텍스트 일치 패턴 줄 검색 :

git diff --unified=0 | grep <pattern>

정규식 정규식과 일치하는 텍스트에 대한 모든 개정을 검색합니다.

git grep <regexp> $(git rev-list --all)

정규식 regexp와 일치하는 텍스트에 대해 rev1과 rev2 사이의 모든 개정을 검색합니다.

git grep <regexp> $(git rev-list <rev1>..<rev2>)
출처 : https://stackoverflow.com/questions/2928584/how-to-grep-search-committed-code-in-the-git-history
728x90
반응형