답변:
git log
+ git branch
당신을 위해 그것을 찾을 것입니다 :
% git log --all -- somefile
commit 55d2069a092e07c56a6b4d321509ba7620664c63
Author: Dustin Sallings <dustin@spy.net>
Date: Tue Dec 16 14:16:22 2008 -0800
added somefile
% git branch -a --contains 55d2069
otherbranch
globbing도 지원합니다 :
% git log --all -- '**/my_file.png'
작은 따옴표는 (적어도 Bash 쉘을 사용하는 경우) 필요하므로 쉘은 glob 패턴을 변경하지 않고 git에 전달합니다 (Unix와 마찬가지로 find
).
somefile
: 당신은 예를 들어, 경로 / 파일 이름을 통해 검색 정규식 필요하다면, 당신은 ididak의 답변을 사용할 수 있습니다.
git log --all -- **/my_file.png
git log --grep='branch' --author='me' -- *.sql
. 매력처럼 일했다. 자식 버전 1.7.11.1
gitk
지원은 물론 글 로빙. @webmat에 대한 훌륭한 답변입니다! 어디에서 삭제 / 생성 된 / etc git log --all --stat -- **/my_file.png
가 있는지 확인하려면을 사용하면 삭제 한 커밋에서 체크 아웃하는지 추측 할 필요가 없습니다.
git ls-tree가 도움이 될 수 있습니다. 기존의 모든 지점을 검색하려면
for branch in `git for-each-ref --format="%(refname)" refs/heads`; do
echo $branch :; git ls-tree -r --name-only $branch | grep '<foo>'
done
이것의 장점은 파일 이름을 정규식으로 검색 할 수도 있다는 것입니다.
git for-each-ref --format="%(refname)" refs/heads
. (d)에 당신이 정확하게 파일 이름을 알 필요가 없습니다 즉 것을, 가치 이것의 장점은 더스틴의 솔루션을 통해이 있다고 답변에서 지적 될 수있다 - 당신이 경로의 일부와 일치하는 정규 표현식으로 검색 할 수 있습니다
refs/remotes
대신을 사용하십시오 refs/heads
. 모든 항목 (로컬 브랜치, 원격 추적 브랜치 및 태그)을 검색하려면을 사용하십시오 refs/
.
ididak의 응답 은 꽤 멋지 지만 Handyman5 는 그것을 사용하는 스크립트를 제공하지만 그 접근 방식을 사용하는 것이 약간 제한적이라는 것을 알았습니다.
때때로 시간이 지남에 따라 표시되거나 사라질 수있는 것을 검색해야하므로 모든 커밋에 대해 검색하지 않는 이유는 무엇입니까? 그 외에도 때로는 자세한 응답이 필요하고 다른 경우에는 일치하는 커밋 만 있습니다. 해당 옵션의 두 가지 버전이 있습니다. 다음 스크립트를 경로에 넣으십시오.
자식 찾기 파일
for branch in $(git rev-list --all)
do
if (git ls-tree -r --name-only $branch | grep --quiet "$1")
then
echo $branch
fi
done
자식 찾기 파일 상세
for branch in $(git rev-list --all)
do
git ls-tree -r --name-only $branch | grep "$1" | sed 's/^/'$branch': /'
done
이제 할 수 있습니다
$ git find-file <regex>
sha1
sha2
$ git find-file-verbose <regex>
sha1: path/to/<regex>/searched
sha1: path/to/another/<regex>/in/same/sha
sha2: path/to/other/<regex>/in/other/sha
getopt 를 사용 하면 모든 커밋, 참조, 참조 / 헤드, 상세 정보 등을 번갈아 검색하도록 해당 스크립트를 수정할 수 있습니다.
$ git find-file <regex>
$ git find-file --verbose <regex>
$ git find-file --verbose --decorated --color <regex>
체크 아웃 https://github.com/albfan/git-find-file 가능한 구현합니다.
이것을 사용하여 복사하여 붙여 넣기 git find-file SEARCHPATTERN
검색된 모든 분기 인쇄 :
git config --global alias.find-file '!for branch in `git for-each-ref --format="%(refname)" refs/heads`; do echo "${branch}:"; git ls-tree -r --name-only $branch | nl -bn -w3 | grep "$1"; done; :'
결과가있는 가지만 인쇄하십시오.
git config --global alias.find-file '!for branch in $(git for-each-ref --format="%(refname)" refs/heads); do if git ls-tree -r --name-only $branch | grep "$1" > /dev/null; then echo "${branch}:"; git ls-tree -r --name-only $branch | nl -bn -w3 | grep "$1"; fi; done; :'
이 명령은 최소한의 쉘 스크립트 ~/.gitconfig
를 전역 git 별명 으로 직접 추가합니다 .
find
Git 리포지토리 에 대한 명령 구현은 다음 과 같습니다.