깃허브 데스크탑으로 프로젝트 관리하기 강의 오픈!! (인프런 바로가기)
git bisect start | 이분 탐색을 시작 |
git bisect bad [commit hash] | 버그가 발생하는 커밋 표시 |
git bisect good [commit hash] | 버그가 발생하지 않는 커밋 표시 |
git bisect reset | 이분 탐색을 종료 |
git log --oneline으로 한 줄로 간단히 현재 커밋된 hash들과 내용을 볼 수 있다.
$ git log --oneline
d8321f00 (HEAD -> main, origin/main, origin/HEAD) Update TestScript3.cs
a029141c Revert "ver 1.0"
c348768c ver 1.0
8bc29f54 version 0.0
9bfdfdd0 Merge pull request #12 from substrawberry/push_test
5e4e5443 RR
1f229436 Merge pull request #11 from substrawberry/push_test
0827e67c push test 2
c05d10a6 Merge pull request #10 from substrawberry/push_test
4699472f push test
10069aac aaa
c9682e2b Merge pull request #8 from substrawberry/merge_main_test
924f937f main merge test
aafca4ae Merge pull request #7 from substrawberry/main
7476ce75 main merge
그런데 어느 날 버그가 발견되었고, 해당 버그가 어떤 commit에서 부터 발생했는지 모른다고 하자.
커밋을 하나씩 되돌려서 찾을 수도 있지만, 커밋이 많으면 매우 번거롭다.
따라서 이런 경우에는 이분 탐색으로 찾는 것이 빠르다.
예를 들어 100개의 커밋이 있고, 50번째 커밋에서도 문제가 발생하고 있다면,
문제가 되는 커밋은 50번째 커밋 이하의 커밋에서 발생한다는 것을 알 수 있다.
아래의 커밋을 revert하거나 reset 해서 (또는 파일 하나만 revert 해서) 아래와 같은 정보를 얻었다고 하자.
9bfdfdd0 : 문제 있음.
10069aac : 문제 없음.
c348768c ver 1.0
8bc29f54 version 0.0
9bfdfdd0 Merge pull request #12 from substrawberry/push_test
5e4e5443 RR
1f229436 Merge pull request #11 from substrawberry/push_test
0827e67c push test 2
c05d10a6 Merge pull request #10 from substrawberry/push_test
4699472f push test
10069aac aaa
c9682e2b Merge pull request #8 from substrawberry/merge_main_test
924f937f main merge test
aafca4ae Merge pull request #7 from substrawberry/main
7476ce75 main merge
그리고 이분 탐색(binary search)을 시작한다.
git bisect start
bisect가 시작되면 브랜치 정보 옆에 BISECTING 이라는 문구가 추가된다. : (main) → (main|BISECTING)
버그가 발생하는 커밋은 git bisect bad [commit hash]로
그렇지 않은 커밋은 git bisect good [commit hash]로 입력한다.
$ git bisect bad 9bfdfdd0
$ git bisect good 10069aac
Bisecting: 2 revisions left to test after this (roughly 2 steps)
[5e4e5443f449b081e0fab398e57a1c8b3931415a] RR
9bfdfdd0 ~ 10069aac 사이에는 5개의 commit이 있으므로 두 번 만에 문제의 커밋을 찾을 수 있다.
따라서 Bisecting: 2 revisions left to test after this (roughly 2 steps) 라는 로그가 나온다.
다음은 5개의 commit 중 가운데 커밋인 0827e67c을 revert 하고 버그 여부를 판단한다.
버그가 존재하지 않는다면 9bfdfdd0를 bad, 0827e67c를 good이 되고,
버그가 존재한다면 0827e67c를 bad, 10069aac를 good으로 다시 진행하면 된다.
9bfdfdd0 Merge pull request #12 from substrawberry/push_test
5e4e5443 RR
1f229436 Merge pull request #11 from substrawberry/push_test
0827e67c push test 2
c05d10a6 Merge pull request #10 from substrawberry/push_test
4699472f push test
10069aac aaa
버그가 발생되는 commit을 찾았다면 git bisect reset으로 종료한다.
$ git bisect reset
Previous HEAD position was 5e4e5443 RR
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
'개발 > Git, GitHub' 카테고리의 다른 글
깃허브에서 New Pull Request로 다른 브랜치에 직접 머지하기 (0) | 2022.08.17 |
---|---|
깃허브 - 프로젝트 보드 만들기 (Create Project Board in GitHub) (0) | 2022.08.06 |
Git Bash - 특정 파일 하나만 되돌리기 (Revert One Specific File) (0) | 2022.07.30 |
깃허브 데스크탑 - Revert와 Reset으로 과거 커밋으로 되돌아가기 (+ Git Bash) (0) | 2022.07.30 |
깃허브 데스크탑 - 커맨드 창을 Git Bash로 변경하기 (Change Command Prompt to Git Bash) (0) | 2022.07.29 |
댓글