2012-11-26 3 views
0

topic-branch-7의 끝 부분에 버그가 있으며 master의 팁에 버그가 없다는 것을 알고 있습니다. topic-branch-7에서 버그가 어디에서 발견되었는지 알고 싶습니다. 그래서 나는 다음과 같은 실행했습니다 :git bisect가 붙어 있습니다

git checkout topic-branch-7 
# some testing to verify the bug 
git bisect start bad # start a git bisect and mark this commit as bad 
git-merge-base master topic-branch-7 
9ac8c59bb10c13d86bcdeff90cb47e25d477caad 
git checkout 9ac8c59bb10c13d86bcdeff90cb47e25d477caad 
# some testing to verify the bug is not present 
git bisect good 

무엇 나를 던지고 것은 내가 자식이 좋은 양분 실행할 때 ... 아무 변화가 없다는 것입니다! 커밋을 좋은 것으로 표시하고,이 커밋과 나쁜 커밋 사이의 중간 지점을 찾고, 커밋에 대한 체크 아웃을 수행해야합니까? 왜 아무 일도 일어나지 않는거야?

답변

0

나는 git bisect가 잘 작동한다는 것을 알고 있지만, 내가하고 싶은 것은 가지를 사용하여 수동으로 해보는 것이다. 좋은 커밋을 선택하고 "좋은"브랜치를 만듭니다. 그런 다음 중간에 커밋을 찾아 테스트합니다. 괜찮 으면, 나는이 하나와 마스터 사이의 커밋에 브랜치를 생성한다. 그렇지 않으면, 선택된 중간 브랜치 아래 커밋에 브랜치를 만든다. 이것은 반복적으로 수행되며 기본적으로 이진 정렬입니다. 그것은 내가 커밋을 확인하고 bisect보다 더 정밀한 제어를한다는 것을 의미합니다. 보통 gitk을 사용하여 각 지점에 대해 체크 아웃합니다. 다른 장점은 뭔가를 찾으면 별도의 지점에서 작업하고 나머지에는 영향을 미치지 않을 수 있다는 것입니다. 예를 들어

Master Commit 
. 
. 
. 
Test Commit <---- This one is good, so keep selecting commits above until you fail 
. 
. 
. 
Middle Commit <--- Create branch and checkout. This one is good, so go above 
. 
. 
. 
Good Commit 
+1

다만 this는 정확히 bisect가하는 것 외에 여분의 모든 브랜치를 생성하지 않는다는 점을 제외하고는 정확히 같다. 나쁜 커밋을 발견하면'checkout -b'를 수행하고 거기에 분기를 만들 수 있습니다. –

+0

bisect를보고 나서 나는 이것이 사실이라는 것을 깨달았다. 내가 수동으로하고 있다는 것을 몰랐다. 여전히 개인적으로는 수동으로 수행하는 것을 선호합니다. 가끔씩 뭔가를 찾기 위해 지점으로 되돌아 가야 할 때가 종종 있고 bisect가 그것을 수행 할 때 방해가 될 수 있습니다. 어쨌든, 가지를 만들고 제거하는 것은 gitk에서 몇 초가 걸립니다. –

2

나는 git bisect에 대한 구문이 잘못되었다고 생각합니다. 그것은이어야한다

git-merge-base master topic-branch-7 
9ac8c59bb10c13d86bcdeff90cb47e25d477caad 
git bisect start topic-branch-7 9ac8c59bb10c13d86bcdeff90cb47e25d477caad 
#you are now at a commit somewhere in between topic-branch-7 and 9ac8c59bb10c13d86bcdeff90cb47e25d477caad 
#do testing to find out if bug is there 
git bisect good/bad 
#repeat until git tells you where the bug is introduced 
git bisect reset HEAD 
관련 문제