zwonlala / git

0 stars 0 forks source link

버그가 발생한 커밋을 빠르고 쉽게 찾을 수 있는 `git bisect` #4

Open zwonlala opened 2 years ago

zwonlala commented 2 years ago

git bisect

버그를 고처야하는데, 해당 버그의 원인이 발생한 커밋을 모를때 사용하면 매우매우 유용할 명령어.

문제가 발생한 커밋의 hash 값을 이진탐색으로 찾아냄.



how to use

0. git bisect 시작

git bisect start // git bisect 시작


1. 먼저 버그를 찾을 커밋들의 시작점과 끝점을 설정해줘야 함

git bisect bad // 현재 커밋(HEAD)에 버그가 있으므로, "git bisect bad" 명령어로 현재 커밋에 문제가 있다고 표시를 남김. 검색할 커밋의 끝점


2. 그 후 버그가 발생하지 않은 커밋 혹은 버젼을 설정한다

git bisect good <GOOD_COMMIT_HASH> // 해당 커밋에서는 버그가 발생하지 않음. 즉 검색할 커밋의 시작점
git bisect good <GOOD_VERSION_TAG_VALUE>
//git bisect good 1.9.26


버그가 발생하지 않은 커밋을 찾을 때 특정 태그(직전 실버서 배포 버전 태그 등..)로 이동하게 되는데,

git checkout tags/원하는태그

위와 같은 방법으로 이동하면 된다. 그리고 버그 발생 유무를 확인한 후 bisect 명령어 사용한다.


3. 그럼 아래와 같이 bisect가 알아서 이진탐색을 하면서 찾은 커밋으로 checkout 해줌

Bisecting: 6 revisions left to test after this
[ecb6e1bc347ccecc5f9350d878ce677feb13d3b2] error handling on repo


4. 이때 지금 설정된 버젼에 버그가 있으면 bad, 문제가 없으면 good이라고 알려준다

git bisect bad
git bisect good


5.계속 그렇게 하다 보면 버그가 발생한 커밋을 찾을 수 있다!

// ex
$ 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


6. 다 끝났으면 git bisect reset 명령어를 통해 bisect 하기 전 상태로 HEAD를 되돌려 놓는다

git bisect reset



+ 자동화

프로젝트가 정상저긍로 수행되면 0, 문제가 있으면 1을 반환하는 스크립트를 만들면,

git bisect 과정을 완전히 자동으로 수행할 수 있음

$ git bisect start HEAD v1.0
$ git bisect run test-error.sh





zwonlala commented 2 years ago

관련 문서