git bisect

Depuração

Encontrar o commit que introduziu um bug por busca binária


O comando 'git bisect' encontra o commit que introduziu um bug. Você marca um commit como ruim (bad, tem o bug) e um como bom (good, não tem); o git faz checkout do commit do meio, você o testa e responde good ou bad, e o git divide os suspeitos ao meio de novo até sobrar um. Mesmo mil commits exigem só uns dez testes. git bisect reset leva você de volta para onde começou.

Sinopse

git bisect start [<bad> [<good>...]]
git bisect (bad | good) [<rev>...]
git bisect skip [<rev>...]
git bisect reset
git bisect log
git bisect run <cmd>...
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Opções

Clique em uma opção para expandir

Iniciante (4)

Inicia uma sessão; opcionalmente já informe o commit ruim e depois os bons.

RecomendadoPule dois comandos: indique bad e good de uma vez

Exemplo

git bisect start HEAD v1.0

O commit atual não pode ser testado; escolhe outro.

Quando necessárioSeguir em frente quando um commit não pode ser testado

Exemplo

git bisect skip

Mostra cada comando e resposta da sessão atual.

Quando necessárioRever ou repetir uma sessão de bisect

Exemplo

git bisect log

Encerra a sessão e volta ao branch de onde você começou.

RecomendadoSempre encerre uma sessão de bisect com ele

Exemplo

git bisect reset

Avançado (1)

Executa um comando em cada candidato: código de saída 0 = bom, 1–127 = ruim, 125 = pular.

RecomendadoBisect totalmente automático com um script de teste

Exemplo

git bisect run npm test

Escolhendo a opção certa

Testes necessários

A busca binária divide os suspeitos ao meio a cada vez

Comandotestes do bisect
10 commitscerca de 4
100 commitscerca de 7
1000 commitscerca de 10

Exemplos

Iniciar uma sessão

git bisect start

Começa a busca.


Marcar commits

git bisect bad && git bisect good v1.0

O commit atual é ruim, v1.0 era bom.


Automatizar

git bisect run npm test

Deixe um script de teste responder por você.


Terminar

git bisect reset

De volta ao seu branch.

Exemplos de fluxos de trabalho

1
git bisect start HEAD v1.0

Ruim agora, bom na v1.0

2
git bisect good / git bisect bad

Testar cada commit que o git faz checkout

3
git bisect reset

De volta ao seu branch

4
git revert <first-bad>

Desfazer o culpado

Solução de problemas

You need to start by "git bisect start"

Causa: Nenhuma sessão em andamento

Execute git bisect start primeiro

Resposta errada dada

Causa: Todos os passos seguintes dependem dela

git bisect log > log.txt, corrija a linha, git bisect reset, git bisect replay log.txt

Dicas e armadilhas

Boas práticas

  • ✓Escreva um teste automático e use git bisect run.
  • ✓Sempre termine com git bisect reset.

Erros comuns

  • ✗Responder errado uma vez — todos os passos seguintes ficam errados (confira com git bisect log).
  • ✗Esquecer git bisect reset e continuar trabalhando num HEAD destacado.
  • ✗Começar com alterações não commitadas que atrapalham os checkouts.

Perguntas frequentes

A:

Sim: git bisect start --term-old=fast --term-new=slow, p. ex. para descobrir quando algo ficou lento.