답변:
당신은 매달려 커밋을 볼 수 있습니다 git log -g
.
-g, --walk-reflogs
Instead of walking the commit ancestry chain, walk reflog entries from
the most recent one to older ones.
따라서 매달려있는 커밋 메시지에서 특정 문자열을 찾기 위해이 작업을 수행 할 수 있습니다.
git log -g --grep=search_for_this
또는 특정 문자열의 변경 사항을 검색하려면 pickaxe 검색 옵션 인 "-S"를 사용할 수 있습니다.
git log -g -Ssearch_for_this
# this also works but may be slower, it only shows text-added results
git grep search_for_this $(git log -g --pretty=format:%h)
Git 1.7.4는 -G 옵션 을 추가하여 -G <regexp>를 전달하여 <regexp>를 포함하는 행이 이동 한시기를 찾아 -S는 할 수 없습니다. -S는 문자열을 포함하는 총 줄 수가 변경된 경우에만 알려줍니다 (예 : 문자열 추가 / 제거).
마지막으로 gitk를 사용하여 댕글 링 커밋을 시각화 할 수 있습니다 :
gitk --all $(git log -g --pretty=format:%h)
그런 다음 검색 기능을 사용하여 잘못 배치 된 파일을 찾으십시오. 누락 된 커밋이 "만료"되지 않고 가비지 수집되었다고 가정하는 이러한 모든 작업은 30 일 동안 매달려 있고 참조 로그를 만료하거나 만료 된 명령을 실행할 경우 발생할 수 있습니다.
!git fsck --unreachable | sed -ne 's/^unreachable commit //p' | xargs git log --no-walk
Mercurial에서는 hg log --keyword
커밋 메시지에서 키워드 hg log --user
를 검색하고 특정 사용자를 검색하는 데 사용합니다. hg help log
로그를 제한하는 다른 방법을 참조하십시오 .
hg log -k
검색은 변경 세트에서도 사용자 이름과 파일 이름을 커밋합니다 (commands.py:log에서 볼 수 있음). 이것은 hg에서 이해하지 못하는 몇 가지 중 하나입니다. 커밋 메시지와 파일 이름을 검색하는 별도의 옵션이 있어야합니다. hg log --template '{desc}\n'|grep
확실한 방법 인 것 같습니다 .
hg grep --all <term>
또는 사용에 대한 richq 답변 외에도 현재 git 관리자 인 Junio C Hamano 의 다음 블로그 게시물을 살펴보십시오.git log -g --grep=<regexp>
git grep -e <regexp> $(git log -g --pretty=format:%h)
git grep 과 git log --grep 는 모두 지정된 패턴과 일치하는 행을 찾기 때문에 행 지향적 입니다.
패턴 중 하나 (내재적 OR 의미) 와 일치 하는 커밋을 찾기 위해 git log --grep=<foo> --grep=<bar>
(또는 git log --author=<foo> --grep=<bar>
내부적으로 2로 변환되는 --grep
) 사용할 수 있습니다 .
라인 지향되는 때문에 유용 AND 의미를 사용하는 것이 git log --all-match --grep=<foo> --grep=<bar>
발견 커밋 즉 갖는 두 제 광고 매칭 라인 초 대체로 일치.
으로 git grep
여러 패턴 (이용해야하는 모든 결합 할 수 있습니다 -e <regexp>
와 함께 양식) --or
(기본값), --and
, --not
, (
와 )
. grep --all-match
은 파일에 각 대안과 일치하는 행이 있어야 함을 의미합니다 .
인수로 참조를받는 모든 명령 은 다음과 같이 --all
매뉴얼 페이지에 문서화 된 옵션 을 허용합니다 git rev-list
.
--all
Pretend as if all the refs in $GIT_DIR/refs/ are listed on the
command line as <commit>.
따라서 예를 들어 git log -Sstring --all
언급 string
하고 분기 또는 태그에서 액세스 할 수있는 모든 커밋을 표시합니다 (댕글 링 커밋은 적어도 태그로 이름이 지정된 것으로 가정합니다).
git grep
, --all
사용에 / 번역 얻을 것으로 보인다 --all-match
. 이것은 나에게 버그처럼 보인다. Git 1.7.2.3 사용 ( $(git rev-list --all)
작품 사용 ).
git에 대해 모르지만 Mercurial에서는 hg 로그 출력을 sed / perl / whatever 스크립트에 파이프하여 원하는 것을 검색합니다. 원하는 경우 템플릿이나 스타일을 사용하여 hg 로그의 출력을 사용자 정의하여보다 쉽게 검색 할 수 있습니다.
여기에는 리포지토리의 모든 명명 된 분기가 포함됩니다. 머큐리얼에는 매달린 얼룩 모양이 없습니다.
vim 사용자 인 경우 tig (apt-get install tig)를 설치하고 동일한 명령을 사용하여 vim을 검색 할 수 있습니다.