Git Bisect
Última atualização
git bisect encontra o commit que introduziu um bug por busca binária. Você informa um commit sabidamente bom e um sabidamente ruim; ele faz checkout de um commit no meio do caminho, você o marca como good ou bad, e ele reduz o intervalo pela metade a cada vez - assim ele localiza o culpado em poucos passos, mesmo entre milhares de commits.
Experimente estes comandos no terminal playground - um shell real no seu navegador, sem nada para instalar.
Sintaxe
| Command | What it does |
|---|---|
git bisect start | Inicia uma sessão de bisect |
git bisect bad | Marca o commit atual como ruim |
git bisect good <hash> | Marca um commit sabidamente bom |
git bisect good / git bisect bad | Marca cada commit testado |
git bisect run ./test.sh | Automatiza: executa um teste para marcar cada passo |
git bisect reset | Encerra o bisect, volta à sua branch |
Exemplo prático
Descubra qual commit quebrou o build.
| Step | Command | Result |
|---|---|---|
| 1 | git bisect start | Inicia a busca |
| 2 | git bisect bad | O commit atual está quebrado |
| 3 | git bisect good v1.0 | Esta tag antiga funcionava |
| 4 | Teste, depois good/bad | Repita até o Git indicar o commit |
Perguntas frequentes sobre git bisect
O que o git bisect faz?
Ele faz uma busca binária no histórico de commits para encontrar o commit exato que introduziu um bug. Você marca um commit como good e outro como bad; o Git faz checkout repetidamente do ponto médio para você testar, reduzindo o intervalo de busca pela metade a cada vez até identificar o primeiro commit ruim.
Como eu uso o git bisect?
Execute
git bisect start, marque o estado quebrado atual com git bisect bad e um commit sabidamente funcional com git bisect good <hash>. O Git faz checkout de um ponto médio; teste-o e execute git bisect good ou git bisect bad. Repita até o Git reportar o primeiro commit ruim e então execute git bisect reset.Posso automatizar o git bisect?
Sim.
git bisect run <script> executa seu script a cada passo - o script deve sair com 0 para um commit bom e com valor diferente de zero para um ruim (executores de teste funcionam bem). O Git então faz o bisect automaticamente sem você marcar cada commit à mão, e imprime o commit problemático no final.Como eu finalizo um bisect?
Execute
git bisect reset para encerrar a sessão e voltar à branch e ao commit em que você estava antes de começar. Faça isso tendo encontrado ou não o commit ruim - isso limpa o estado temporário do bisect.Posso praticar isso online?
Sim. Abra o terminal playground para executar
git bisect em um shell real no seu navegador - sem nada para instalar. O curso interativo e gratuito de Git da Coddy também aborda como inspecionar o histórico passo a passo.