Git
Bisecting / 결함있는 커밋 찾기
수색…
통사론
git bisect <subcommand> <options>
git bisect start <bad> [<good>...]
git bisect reset
git bisect good
git bisect bad
이진 검색 (git bisect)
git bisect
사용하면 바이너리 검색을 사용하여 버그를 git bisect
커밋을 찾을 수 있습니다.
두 개의 커밋 참조를 제공하여 세션을 양분 (bisect)하는 것으로 시작하십시오 : 버그 이전에 좋은 커밋, 버그 이후 커밋이 잘못되었습니다. 일반적으로 잘못된 커밋은 HEAD
입니다.
# start the git bisect session
$ git bisect start
# give a commit where the bug doesn't exist
$ git bisect good 49c747d
# give a commit where the bug exist
$ git bisect bad HEAD
git
은 바이너리 검색을 시작한다 : 리비젼을 반으로 분할하고 저장소를 중간 리비전으로 전환한다. 코드를 검사하여 개정판의 양호 여부를 확인합니다.
# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good
# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad
git
은 지침에 따라 나쁜 버전의 나머지 부분 집합에 대해 계속 이진 검색을 실행합니다. git
은 플래그가 올바르지 않는 한 버그가 도입 된 리비전을 정확히 나타내는 단일 리비전을 제공합니다.
이후 git bisect reset
을 실행하여 bisect 세션을 끝내고 HEAD로 돌아 간다.
$ git bisect reset
버그를 확인할 수있는 스크립트가있는 경우 다음을 사용하여 프로세스를 자동화 할 수 있습니다.
$ git bisect run [script] [arguments]
여기서 [script]
는 [script]
의 경로이고 [arguments]
는 스크립트에 전달되어야하는 인수입니다.
이 명령을 실행하면 스크립트의 종료 코드에 따라 각 단계에서 git bisect good
또는 git bisect bad
를 실행하면 자동으로 이진 검색을 통해 실행됩니다. 0으로 종료하면 good
함을 나타내지 만 1-124, 126 또는 127로 종료하면 불량을 나타냅니다. 125는 스크립트가 해당 리비전을 테스트 할 수 없음을 나타냅니다 ( git bisect skip
트리거합니다).
반 자동으로 잘못된 커밋 찾기
당신이 master
브랜치에 있고 뭔가가 예상대로 작동하지 않는다고 상상해보십시오 (회귀가 도입되었습니다). 그러나 당신은 어디에 있는지 모릅니다. 아시다시피, 그것은 마지막 릴리스 (예 : 태그가 붙어 있거나 커밋 해시를 알고 있으며, 여기에서 old-rel
취할 수 있음)에서 작업 중입니다.
힘내는 매우 낮은 단계 수 (2 진 검색)로 회귀를 도입 한 잘못된 커밋을 찾는 데 도움을줍니다.
우선 bisecting 시작 :
git bisect start master old-rel
이것은 master
가 깨진 리비전 (또는 최초의 깨진 버전)이고 old-rel
이 마지막으로 알려진 버전임을 알려줍니다.
자식은 두 커밋 중간에 분리 된 헤드를 체크 아웃합니다. 이제 테스트를 할 수 있습니다. 작동 여부에 따라 다름
git bisect good
또는
git bisect bad
. 이 커밋을 테스트 할 수없는 경우 git reset
시도하고 그 커밋을 테스트하면됩니다.
몇 단계 후에 자식은 잘못된 커밋 해시를 출력합니다.
양분 과정을 중단시키기 위해서 그냥 발행하십시오.
git bisect reset
git은 이전 상태를 복원 할 것이다.