Git Bisect
마지막 업데이트
git bisect는 이진 탐색으로 버그를 유발한 커밋을 찾습니다. 정상으로 알려진 커밋과 문제가 있는 것으로 알려진 커밋을 알려주면, 그 중간 커밋을 체크아웃하고, 당신이 good 또는 bad로 표시하면 매번 범위를 절반으로 좁힙니다 - 그래서 수천 개의 커밋 사이에서도 몇 단계 만에 범인을 짚어냅니다.
이 명령들을 터미널 플레이그라운드에서 사용해 보세요 - 브라우저 안의 진짜 셸이며, 설치할 것이 없습니다.
구문
| Command | What it does |
|---|---|
git bisect start | bisect 세션을 시작한다 |
git bisect bad | 현재 커밋을 문제 있음으로 표시한다 |
git bisect good <hash> | 정상으로 알려진 커밋을 표시한다 |
git bisect good / git bisect bad | 테스트한 각 커밋을 표시한다 |
git bisect run ./test.sh | 자동화: 각 단계를 표시하기 위해 테스트를 실행한다 |
git bisect reset | bisect를 종료하고 브랜치로 돌아간다 |
실습 예제
어떤 커밋이 빌드를 망가뜨렸는지 찾습니다.
| Step | Command | Result |
|---|---|---|
| 1 | git bisect start | 탐색을 시작한다 |
| 2 | git bisect bad | 현재 커밋이 망가져 있다 |
| 3 | git bisect good v1.0 | 이 오래된 태그는 정상이었다 |
| 4 | 테스트한 뒤 good/bad | Git이 커밋을 지목할 때까지 반복한다 |
git bisect 자주 묻는 질문
git bisect는 무엇을 하나요?
커밋 히스토리를 이진 탐색하여 버그를 유발한 정확한 커밋을 찾습니다. 한 커밋을 good, 다른 커밋을 bad로 표시하면 Git이 테스트할 수 있도록 중간 지점을 반복해서 체크아웃하며, 첫 번째 문제 커밋을 찾아낼 때까지 매번 탐색 범위를 절반으로 줄입니다.
git bisect는 어떻게 사용하나요?
git bisect start를 실행하고, 현재의 망가진 상태를 git bisect bad로, 정상 작동하는 것으로 알려진 커밋을 git bisect good <hash>로 표시합니다. Git이 중간 지점을 체크아웃하면 그것을 테스트하고 git bisect good 또는 git bisect bad를 실행합니다. Git이 첫 번째 문제 커밋을 보고할 때까지 반복한 다음 git bisect reset을 실행합니다.git bisect를 자동화할 수 있나요?
예.
git bisect run <script>는 각 단계에서 스크립트를 실행합니다 - 스크립트는 정상 커밋이면 0, 문제 커밋이면 0이 아닌 값으로 종료해야 합니다(테스트 러너가 잘 맞습니다). 그러면 Git이 각 커밋을 손으로 표시하지 않아도 자동으로 bisect를 수행하고, 마지막에 문제가 된 커밋을 출력합니다.bisect는 어떻게 끝내나요?
git bisect reset을 실행하여 세션을 종료하고 시작하기 전에 있던 브랜치와 커밋으로 돌아갑니다. 문제 커밋을 찾았든 못 찾았든 이것을 실행하세요 - 임시 bisect 상태를 정리합니다.이것을 온라인에서 연습할 수 있나요?
예. 터미널 플레이그라운드를 열어 브라우저 안의 진짜 셸에서
git bisect를 실행하세요 - 설치할 것이 없습니다. Coddy의 무료 인터랙티브 Git 강좌에서도 히스토리를 단계별로 살펴보는 방법을 다룹니다.