git bisect 이진 탐색으로 버그 원인 커밋 찾기
git bisect
버그가 발생했을 때, 어느 커밋이 원인인지 이진 탐색으로 찾을 수 있다.
- 먼저
git bisect start
명령으로 이진 탐색을 시작한다. git bisect bad
를 실행하여 현재 커밋에 문제가 있다고 표시를 남긴다.- 문제가 없는 마지막 커밋을
git bisect good <good_commit>
명령으로 표시한다.
1
2
3
4
5
$ git bisect start
$ git bisect bad
$ git bisect good 커밋id
Bisecting: 6 revisions left to test after this
[ecb6e1bc347ccecc5f9350d878ce677feb13d3b2] error handling on repo
Git은 마지막으로 괜찮았던 커밋(good_commit)과 현재 문제가 있는 커밋 중간에 있는 커밋을 Checkout 해준다.
여기에서 해당 이슈가 구현됐는지 테스트해보고 만약 이슈가 있으면 그 중간 커밋 이전으로 범위를 좁히고, 이슈가 없으면 그 중간 커밋 이후로 범위를 좁힌다.
- 이슈를 발견하지 못하면
git bisect good
으로 이슈가 아직 없음을 알리고 계속 진행한다. - 다시 테스트해보고 이슈가 있으면
git bisect bad
로 이슈가 있다고 알린다. - 이제 이슈를 처음 구현한 커밋을 찾았다.
git bisect good
로 이 문제가 발생한 시점에 무슨 일이 있었는지 확인해본다.
1
2
3
4
5
6
7
8
9
10
$ git bisect good
b047b02ea83310a70fd603dc8cd7a6cd13d15c04 is first bad commit
commit b047b02ea83310a70fd603dc8cd7a6cd13d15c04
Author: PJ Hyett <pjhyett@example.com>
Date: Tue Jan 27 14:48:32 2009 -0800
secure this thing
:040000 040000 40ee3e7821b895e52c1695092db9bdc4c61d1730
f24d3c6ebcfc639b1a3814550e62d60b8e68a8e4 M config
이 때 커밋은 first bad commit 시점으로 checkout 되어있으므로 git bisect reset
명령을 실행시켜서 이진 탐색을 시작하기 전으로 HEAD를 돌려놓는다.
참고사이트
This post is licensed under CC BY 4.0 by the author.