어떤 분기에서 문자열을 도입한 Git 커밋을 어떻게 찾을 수 있습니까?
어떤 분기에서든 커밋에 도입된 특정 문자열을 찾을 수 있기를 원하는데, 어떻게 해야 합니까?를 위해 한) , (Win32를 위해 수정한) ,git whatchanged
청크를 fix)를것 같습니다(py3k 청크는 msys/win line feed fix일 뿐) 것 같습니다.
git whatchanged -- <file> | \
grep "^commit " | \
python -c "exec(\"import sys,msvcrt,os\nmsvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)\nfor l in sys.stdin: print(l.split()[1])\")" | \
xargs -i% git show origin % -- <file>
솔루션 속도가 느리더라도 크게 문제가 되지 않습니다.
할 수 있는 일:
git log -S <search string> --source --all
고정 문자열을 추가하거나 제거한 모든 커밋을 찾으려면 다음과 같이 하십시오. search string
.--all
모수는 모든 분기에서 시작하는 평균입니다.--source
어떤 분기가 해당 커밋을 찾도록 이끌었는지 보여주는 수단입니다.추가하는 것이 종종 유용합니다.-p
각 커밋이 도입할 패치를 보여줍니다.
1.7.4 이후 버전의 git에도 정규식을 사용하는 유사한 옵션이 있습니다.하마노 주니오의 이 블로그 게시물에서 설명한 바와 같이, 이것은 실제로 다른 의미를 가지고 있습니다.
주석에서 설명하는 것처럼 검색어에 공백이나 기타 특수 문자가 포함된 경우에는 다음과 같이 따옴표를 사용해야 합니다.
git log -S 'hello world' --source --all
git log -S "dude, where's my car?" --source --all
여기에 다은을사예입다니한을 사용한 .-G
의 발생을 찾아내다function foo() {
:
git log -G "^(\s)*function foo[(][)](\s)*{$" --source --all
--commit는 변경한 첫 번째 커밋을 원하기 때문에 유용합니다.
git log --all -p --reverse --source -S 'needle'
이렇게 하면 이전 커밋이 먼저 나타납니다.
같은 대답을 가지고 장난치는 것:
$ git config --global alias.find '!git log --color -p -S '
이제 할 수 있습니다.
$ git find <whatever>
또는
$ git find <whatever> --all
$ git find <whatever> master develop
Mark Longair의 답변은 훌륭하지만, 저는 저에게 맞는 이 간단한 버전을 찾았습니다.
git log -S whatever
git log -S"string_to_search" # options like --source --reverse --all etc
S와 "string_to_search" 사이에 공백을 사용하지 않도록 주의하십시오.일부 설정(git 1.7.1)에서는 다음과 같은 오류가 발생합니다.
fatal: ambiguous argument 'string_to_search': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
이것이 여러분의 질문에 직접적으로 답하지는 않지만, 저는 이것이 미래에 여러분에게 좋은 해결책이 될 수 있다고 생각합니다.제 코드의 일부를 봤는데, 안 좋았어요.누가 언제 썼는지 몰랐어요파일의 모든 변경 사항을 확인할 수 있었지만 코드가 다른 파일에서 이 파일로 이동된 것은 분명했습니다.저는 애초에 누가 실제로 그것을 추가했는지 찾고 싶었습니다.
이를 위해, 저는 Git bisect를 사용했습니다. 그것은 제가 빠르게 죄인을 찾을 수 있게 해줍니다.
도망친git bisect start
그리고 나서.git bisect bad
체크아웃된 개정판에 문제가 있었기 때문입니다.문제가 발생한 시기를 알 수 없었기 때문에 '선(善)'을 위한 최초의 커밋을 목표로 삼았고,git bisect good <initial sha>
.
그리고 나서 저는 계속해서 레포에서 나쁜 코드를 검색했습니다.그것을 발견했을 때, 나는 달려갔습니다.git bisect bad
그리고 그것이 없을 때:git bisect good
.
~11단계에서 ~1000개의 커밋을 다루었고 문제가 발생한 정확한 커밋을 찾았습니다.아주 좋습니다.
승인된 답변이 사용자 환경에서 작동하지 않는 이유를 잘 모르겠습니다. 마지막으로 필요한 내용을 얻기 위해 아래 명령을 실행합니다.
git log --pretty=format:"%h - %an, %ar : %s"|grep "STRING"
언급URL : https://stackoverflow.com/questions/5816134/how-to-find-the-git-commit-that-introduced-a-string-in-any-branch
'bestsource' 카테고리의 다른 글
Azure의 새 스토리지 계정과 기존 스토리지 계정의 차이점 (0) | 2023.05.24 |
---|---|
sed를 사용하여 파일 이름 대량 변경 (0) | 2023.05.24 |
mongoid에서 embeds_many와 has_many의 차이 (0) | 2023.05.14 |
WPF 탭 항목 머리글 스타일 (0) | 2023.05.14 |
목록에서 문자열 값 찾기 및 바꾸기 (0) | 2023.05.14 |