git bisect: quem quebrou o copo?
Como achar o commit que introduziu um bug em poucos passos, mesmo com centenas de commits no caminho.
![]()
O teste passava na semana passada. Hoje não passa. Entre um dia e outro entraram 200 commits, e ninguém assume nada.
Olhar um por um não escala. O git bisect faz busca binária no histórico: a cada passo ele corta pela metade o número de suspeitos. Com 200 commits, você chega no culpado em uns 8 passos.
O jeito manual
Você diz onde estava quebrado e onde ainda funcionava. O Git faz checkout no meio do caminho, e você responde.
git bisect start
git bisect bad # o commit atual está quebrado
git bisect good v1.4.0 # aqui ainda funcionava
# testa e responde, até o Git apontar o culpado
git bisect good # ou: git bisect bad
git bisect reset # volta pra onde você estava
O jeito preguiçoso
Se um comando consegue dizer se o bug existe, o Git faz o trabalho sozinho. Ele usa o código de saída: zero é bom, diferente de zero é ruim.
git bisect start HEAD v1.4.0
git bisect run npm test
git bisect reset
O código de saída 125 tem um significado especial: ele diz ao Git pra pular aquele commit. Serve pra quando o commit nem compila.
Quando não ajuda
O bisect assume que o bug apareceu uma vez e ficou. Se o teste é instável, a busca binária vai te levar pro commit errado com muita confiança. Conserta o teste antes.