Git를 사용하여 모든 분기에서 문자열을 검색하려면 어떻게 해야 합니까?
Git를 사용하여 모든 로컬 분기의 모든 파일에서 지정된 문자열을 검색하려면 어떻게 해야 합니까?
GitHub 관련: 모든 GitHub 분기에서 위의 검색을 수행할 수 있습니까? (내 원격 GitHub 저장소에는 이상적으로 이 검색을 위해 중단할 필요가 없는 여러 원격 분기가 있습니다...)
Git 저장소에서 이 작업을 수행할 수 있습니다.
git grep "string/regexp" $(git rev-list --all)
GitHub 고급 검색에는 코드 검색 기능이 있습니다.
코드 검색은 GitHub에서 공개적으로 호스팅된 모든 코드를 조사합니다.다음 기준으로 필터링할 수도 있습니다.
- 언어:
language:
- 리포지토리 이름(사용자 이름 포함):
repo:
- 파일 경로:
path:
@manojlds Gitgrep 명령을 사용하는 경우 오류가 표시됩니다.
-bash: /usr/bin/git: Argument list too long"
그런 다음 xargs를 사용해야 합니다.
git rev-list --all | xargs git grep "string/regexp"
Git 기록에서 커밋된 코드를 grep(검색)하는 방법도 참조하십시오.
많은 경우git rev-list --all
검색하는 데 시간이 오래 걸려 엄청난 수의 커밋을 반환할 수 있습니다.저장소 기록의 모든 분기에 대한 모든 커밋을 검색하는 대신 모든 분기 팁을 검색하려는 경우 다음으로 대체할 수 있습니다.git show-ref -s --heads
그래서 총합:
git grep "string" `git show-ref -s --heads`
또는:
git show-ref -s --heads | xargs git grep "string"
팁: 출력을 파일로 작성하여 편집기에서 볼 수 있습니다.
nano ~/history.txt
git show-ref -s --heads | xargs git grep "search string here" >> ~/history.txt
여기 나열된 솔루션에는 몇 가지 문제가 있습니다(승인된 솔루션도 있음).
중복되므로 모든 해시를 나열할 필요는 없습니다.또한, 그것은 더 많은 시간이 걸립니다.
이것을 기반으로 문자열을 검색할 수 있습니다."test -f /"
여러 갈래로master
그리고.dev
~하듯이
git grep "test -f /" master dev
와 같은 것
printf "master\ndev" | xargs git grep "test -f /"
자, 그럼 시작합니다.
이렇게 하면 모든 로컬 분기 끝에 대한 해시가 검색되고 다음 커밋에서만 검색됩니다.
git branch -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"
원격 지점에서도 검색해야 하는 경우 추가-a
:
git branch -a -v --no-abbrev | awk -F' *' '{print $3}' | xargs git grep "string/regexp"
추가:
# Search in local branches
git branch | cut -c3- | xargs git grep "string"
# Search in remote branches
git branch -r | cut -c3- | xargs git grep "string"
# Search in all (local and remote) branches
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
# Search in branches, and tags
git show-ref | grep -v "refs/stash" | cut -d' ' -f2 | xargs git grep "string"
사용해 볼 수 있습니다.
git log -Sxxxx # Search all commits
git log -Sxxxx --branches[=<pattern>] # Search branches
@peter-mortensen & manojlds의 솔루션에 따라, 저는git for-each-ref
하위 명령으로 이름을 가진 분기만 나열합니다.
git grep "string/regexp" $(git for-each-ref --format='%(refname:short)' refs/heads)
이렇게 하면 명명된 분지만 표시하고 각 분기에 대해 하나의 결과만 생성하여 시각화를 개선할 수 있습니다.
분기 이름을 검색 결과와 함께 표시하려면 루프를 사용하여 다음과 같이 각 분기를 개별적으로 검색할 수 있습니다.
bash 코드
for branch in $(git branch | awk '{print $1}'); do
echo "Branch: $branch"
git grep "SEARCH_WORD" $(git rev-parse $branch)
done
이 루프는 git branch를 사용하여 모든 분기를 나열하고 awk를 사용하여 분기 이름만 추출합니다.그런 다음 git rev-parse를 사용하여 각 분기의 커밋 해시를 가져오고 git grep을 사용하여 해당 분기에서 "deleteTemplateDocument" 문자열을 검색합니다.출력에 분기 이름과 각 분기에 대한 일치 결과가 표시됩니다.
git log -S <search string> --source --all
https://stackoverflow.com/a/5816177/5368856
커밋을 되돌립니다. 커밋 ID가 HEAD에 없을 수 있습니다.
git revert commit_id
대/소문자 사용을 무시하는 방법 -i:
git log -i --all --grep='word1 Word2'
언급URL : https://stackoverflow.com/questions/7151311/using-git-how-could-i-search-for-a-string-across-all-branches
'programing' 카테고리의 다른 글
Postgre에 행이 있는지 가장 빠르게 확인SQL (0) | 2023.05.11 |
---|---|
어떻게 f-string 평가를 연기/연기합니까? (0) | 2023.05.11 |
Xcode 빌드 설정에서 "아키텍처"와 "유효한 아키텍처"의 차이점은 무엇입니까? (0) | 2023.05.06 |
C++ std:: 문자열이 특정 문자열로 시작하는지 확인하고 하위 문자열을 int로 변환하려면 어떻게 해야 합니까? (0) | 2023.05.06 |
git: 새 파일을 포함한 모든 작업 dir 변경 실행 취소 (0) | 2023.05.06 |