git의 bisect에 대해 알아봅니다.
▶bisect란
- 코딩을 하다보면 버그가 발생한지 모르고 후속 커밋을 하는 경우가 있습니다.
- 나중에 버그를 발견했을 때 이 버그가 어떤 버전에서 시작된 것인지를 탐색해야 하는 경우가 있습니다.
- 역순으로 checkout 하는 것은 버전이 많은 경우에 많은 시간이 필요.
- 버그를 찾을 때 binary search를 이용해서 더 빠르게 탐색할 수 있는 기능이 bisect다.
Linear Search & Binary Search
Linear Search
- 처음부터 끝까지 하나씩 순서대로 비교하면서 찾음.
- 정렬이 필요 없음. 정렬이 안 된 데이터에도 사용 가능.
- 구현이 간단.
- 데이터가 많아질수록 속도가 느림.
Binary Search
- 리스트의 가운데 값을 확인하고, 찾고자 하는 값이 왼쪽/오른쪽 중 어디에 있는지 판단하여 반씩 줄여가며 탐색.
- 데이터가 정렬되어 있어야 함. 정렬된 데이터에만 사용 가능.
- 탐색 속도가 매우 빠름.

🌟bisect 사용하기
git bisect start
: git의 bisect 기능 시작.
- 현재 머물고 있는 버전에
git bisect bad
: 현재 커밋에 버그가 있음을 표시.
- git log에서 현재 머물고 있는 버전에 'bisect/bad'라는 특수 마킹이 추가된 것을 볼 수 있음.
git checkout 오류가있을것으로의심되는commitid
: 해당 커밋으로 HEAD를 이동시킴. working directory는 해당 커밋 시점 상태로 바뀜.
- 이동된 커밋에서
git bisect good
: 현재 커밋에 버그가 없음을 표시.
- git이 자동으로 중간 커밋으로 이동함.
- 이동된 커밋에서 버그가 있으면
git bisect bad
, 없으면 git bisect good
- 이 과정을 반복하면서 버그가 생긴 시점을 좁혀감.
- 버그가 생긴 커밋을 찾으면
git bisect reset
: 출발했던 원래 커밋으로 돌아오고, bisect 과정 중 생긴 마킹들은 삭제.