Executando verificação de segurança...
2

[GIT] Bisect - Aula 18

Bisect

É um comando usado para encontrar Commits problemáticos em um histórico de alterações. Ele utiliza uma busca binária (por isso o nome "Bisect") para identificar qual Commit introduziu um bug ou erro no código.

Obs: O Bisect não é exclusivo para encontrar bugs, ele pode ser usado para identificar qualquer alteração específica no código.

Como fazer um Bisect

Iniciamos fazendo uma busca:

git bisect start

Devemos então indicar um Commit que contenha o bug e outro que não o contenha, é o conceito de bom (Good) e mau (Bad).

Good = Commit que não contem bug.

Bad = Commit que contem o bug.

git bisect bad Commit_Hash
git bisect good Commit_Hash

Obs: Caso não informe o Hash no Bisect Bad, ele irá considerar o Commit atual.

Após isso, o Git buscará um Commit para você testar se ele possui o bug.

Faça o teste manualmente e então indique ao Git:

git bisect bad

Se o teste falhar e o Commit estiver com o bug.

ou

git bisect good

Se o teste funcionar e o Commit não estiver com o bug.

O Git continuará a fazer checkout em Commits intermediários até identificar o culpado.

Quando o Git encontrar o Commit específico, ele mostrará algo como:

abc789 is the first bad commit

Após isso basta finalizar o Bisect:

git bisect reset

Busca Binária

A busca binária do Bisect funciona dividindo iterativamente o espaço de Commits em duas metades.

Iniciamos Indicando o Commit bom e o Commit ruim, isso dará ao Git um intervalo de busca.

O Git calcula um Commit intermediário entre os dois, para chegar ao meio.

Então vem o momento em que indicamos ao Git se aquele Commit é bom ou ruim.

Bom = O Git saberá que todos os Commits anteriores a esse também são bons.

Ruim = O Git saberá que todos os Commits que se encontram a frente do Commit testado são ruins.

Com base no resultado, o Git descarta metade dos Commits e repete o processo.

Bisect Run

O git bisect run automatiza o processo de Bisect, executando um comando ou script de teste em cada commit.

Como funciona?

O comando fornecido após git bisect run deve retornar:

0 = Se o Commit estiver bom.

Qualquer valor diferente de 0: Se o commit estiver ruim.

Como usar o Bisect Run

Suponha que você tenha um script de teste chamado testar_codigo.sh:

#!/bin/bash
python meu_programa.py > /dev/null
if grep -q "Erro fatal" log.txt; then
    exit 1  # Bug encontrado
else
    exit 0  # Tudo certo
fi

Para automatizar o Bisect:

  • Inicie a busca

  • Indique o Commit bom e o Commit ruim

  • Execute:

git bisect run ./testar_codigo.sh

O Git rodará o teste em cada Commit, marcando como bom ou ruim com base no valor de saída.

Carregando publicação patrocinada...