Git Bisect para depuração
Utilize o `git bisect` para encontrar com eficiência o commit específico que introduziu um erro, economizando tempo valioso de depuração.
Git Bisect para depuração é uma aula grátis de DevOps Bootcamp no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de DevOps Bootcamp, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de DevOps Bootcamp inclui 4 aulas no total.
Encontrando erros mais rapidamente com o Git
A depuração pode ser difícil. Às vezes, um erro aparece e você não sabe qual alteração o causou.
git bisect é um comando poderoso do Git que ajuda a localizar a confirmação exata que introduziu um erro. Ele usa um algoritmo de busca binária para reduzir rapidamente milhares de confirmações.
O poder da busca binária
Imagine que o seu projeto tenha 100 confirmações e que um erro tenha surgido em algum ponto entre a primeira e a última. Verificar cada uma manualmente é demorado!
git bisect funciona como um jogo de "adivinhe o número":
- Você informa ao Git uma confirmação "boa" (em que o erro não estava presente).
- Você informa ao Git uma confirmação "ruim" (em que o erro está presente).
- O Git escolhe uma confirmação aproximadamente no meio e pede que você a teste.
- Você a marca como "boa" ou "ruim", e o Git reduz pela metade o espaço de busca.
Vamos iniciar a busca!
Para começar, você precisa informar ao Git que está iniciando uma sessão de busca binária. Este comando inicializa o processo:
git bisect start
Depois de iniciar, você especificará uma confirmação "ruim" conhecida (em que o erro existe) e uma confirmação "boa" conhecida (em que o erro definitivamente não existia).
Com frequência, a confirmação "ruim" é o seu HEAD atual, e uma confirmação "boa" pode ser uma etiqueta de versão mais antiga ou uma confirmação de alguns dias atrás.
Marcando os limites das suas confirmações
Depois de iniciar git bisect, você define o intervalo da busca:
- Confirmação ruim: é uma confirmação em que você sabe que o erro existe. Use
git bisect bad <commit-hash>ou simplesmentegit bisect badse ela for o seuHEADatual. - Confirmação boa: é uma confirmação em que você sabe que o erro NÃO existia. Use
git bisect good <commit-hash>.
Em seguida, o Git fará automaticamente o checkout de uma confirmação no meio desse intervalo.
Testando e reduzindo o intervalo
Depois que você marcar as confirmações boa e ruim, o Git fará automaticamente o checkout de uma confirmação no meio do intervalo. Sua tarefa é testar o código nessa confirmação selecionada.
- Se o erro IS estiver presente, digite
git bisect bad. - Se o erro IS NOT estiver presente, digite
git bisect good.
O Git escolherá outra confirmação intermediária no intervalo restante. Você repetirá esse processo até que o Git encontre a primeira confirmação "ruim".
Simulando a introdução de um erro
Vamos imaginar um "erro" simples em um script. Simularemos um histórico de projeto em que um pequeno erro foi introduzido.
Este é o nosso script "bom" inicial:
main.sh
#!/bin/bash
echo "Hello from script!"
sum=0
for i in $(seq 1 3); do
sum=$((sum + i))
done
echo "Sum is: $sum"Demonstração passo a passo da busca binária manual
Agora, digamos que uma confirmação posterior tenha alterado acidentalmente o laço para seq 1 4, fazendo com que a soma ficasse incorreta (10 em vez de 6).
Começaríamos assim:
git bisect start
Em seguida, marcaríamos o nosso HEAD atual (em que o erro existe) como ruim:
git bisect bad HEAD
E uma confirmação mais antiga, que sabemos que funcionava, como boa:
git bisect good <old_good_commit_hash>
O Git nos orientará, fazendo o checkout das confirmações. Executaríamos ./main.sh, verificaríamos se a soma é 6 ou 10 e então digitaríamos git bisect good ou git bisect bad, conforme o caso.
Automatizando o processo de depuração
Testar cada confirmação manualmente ainda pode consumir muito tempo se o teste for complexo. git bisect run permite automatizar esse processo!
Você fornece um script que termina com:
0(zero) se a confirmação for boa.125se a confirmação tiver de ser ignorada.- Qualquer outro valor diferente de zero (por exemplo,
1) se a confirmação for ruim.
O Git executará esse script em cada confirmação testada até encontrar o erro.
#!/bin/bash
./main.sh | grep "Sum is: 6"
if [ $? -eq 0 ]; then
exit 0 # Good commit
else
exit 1 # Bad commit
fiConcluindo a sua busca
Quando git bisect identificar com sucesso a primeira confirmação ruim, ele informará o hash e a mensagem dessa confirmação.
Depois de encontrar a causa e entender o problema, é essencial redefinir o seu repositório para o estado original anterior ao início da busca binária:
git bisect reset
Este comando leva você de volta à confirmação em que estava quando iniciou a busca binária, limpando o estado temporário desse processo.
Verificação de conhecimentos sobre busca binária
Você acabou de executar git bisect start, marcou o seu HEAD atual como ruim e uma confirmação mais antiga como boa. O Git fez o checkout de uma confirmação intermediária.
Você executa os seus testes e o erro IS PRESENT nessa confirmação intermediária.
Recapitulação de <code>git bisect</code>
Parabéns! Você aprendeu a usar git bisect:
- É uma ferramenta poderosa para encontrar a confirmação exata que introduziu um erro.
- Usa uma busca binária para obter eficiência.
- Você define confirmações "boas" (sem erros) e "ruins" (com erros).
- Você pode automatizar o processo de testes com
git bisect run <script>. - Lembre-se sempre de executar
git bisect resetpara limpar tudo depois da busca!
Perguntas Frequentes
A aula “Git Bisect para depuração” é grátis?
Sim — o texto completo de “Git Bisect para depuração” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de DevOps Bootcamp, atualize para CoddyKit PRO. O curso de DevOps Bootcamp inclui 4 aulas no total.
O que vou aprender em “Git Bisect para depuração”?
Utilize o `git bisect` para encontrar com eficiência o commit específico que introduziu um erro, economizando tempo valioso de depuração. Você pratica DevOps Bootcamp com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar DevOps Bootcamp?
Nenhuma experiência prévia é necessária. DevOps Bootcamp no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Git Bisect para depuração”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de DevOps Bootcamp?
Sim. Cada aula de DevOps Bootcamp inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Git Reflog e recuperação do histórico
- Git Bisect para depuração
- Manutenção e organização do repositório
- Reescrevendo o Histórico com git filter-repo