Butecho

PaposPetisco

git bisect: quem quebrou o copo?

Como achar o commit que introduziu um bug em poucos passos, mesmo com centenas de commits no caminho.

João · · 1 min de leitura

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.

A saideira

Sai pelo Substack. Dá pra cancelar quando quiser.

Mais papo na mesa

balcãoCtrl K
$ echo "puxa uma cadeira"
puxa uma cadeira
Terminal de verdade: digita help ou usa um atalho.