DEV Community

Isaias Velasquez
Isaias Velasquez

Posted on

How to usar stash, bisect e worktree no Git

Git tem comandos que vao alem do commit e push. Tres deles salvam tempo em situacoes especificas: stash, bisect e worktree.

Stash guarda modificacoes nao commitadas para voce poder mudar de branch sem perder o trabalho:

echo "nova feature" > arquivo.txt
git stash push -m "WIP: comeco da feature"
git stash list
git stash pop
Enter fullscreen mode Exit fullscreen mode

Para guardar apenas arquivos especificos:

git stash push -m "so mudancas no frontend" src/frontend/
Enter fullscreen mode Exit fullscreen mode

Para ver o que tem dentro de um stash sem aplicar:

git stash show -p stash@{0}
Enter fullscreen mode Exit fullscreen mode

Bisect faz busca binaria no historico para encontrar o commit que introduziu um bug:

git bisect start
git bisect bad       # versao atual esta quebrada
git bisect good v1.0 # versao v1.0 estava funcionando
Enter fullscreen mode Exit fullscreen mode

O Git vai fazendo checkout nos commits do meio do caminho. Voce testa e marca:

git bisect good  # esse commit funciona
git bisect bad   # esse commit esta quebrado
Enter fullscreen mode Exit fullscreen mode

Quando encontrar o commit culpado, o Git mostra a mensagem. Para sair:

git bisect reset
Enter fullscreen mode Exit fullscreen mode

Da para automatizar com um script:

git bisect start HEAD v1.0
git bisect run python test_bug.py
Enter fullscreen mode Exit fullscreen mode

O Git executa test_bug.py em cada commit. Se o script retorna 0, marca como good. Se retorna 1, marca como bad.

Worktree permite ter multiplos branches checked out ao mesmo tempo em pastas separadas:

git worktree add ../projeto-hotfix hotfix/urgente
Enter fullscreen mode Exit fullscreen mode

Isso cria uma pasta projeto-hotfix ao lado do seu projeto com o branch hotfix/urgente ja checked out. Voce trabalha nos dois ao mesmo tempo sem precisar esconder nada com stash.

Para listar worktrees ativas:

git worktree list
Enter fullscreen mode Exit fullscreen mode

Para remover uma worktree:

git worktree remove ../projeto-hotfix
git branch -d hotfix/urgente
Enter fullscreen mode Exit fullscreen mode

Worktree e ideal para revisao de PR. Voce faz checkout do branch do PR em outra pasta, revisa, testa, e volta para seu branch sem perder contexto.

Stash resolve trocas rapidas de contexto. Bisect encontra bugs em minutos que levariam horas manualmente. Worktree elimina o atrito de alternar entre branches. Os tres juntos cobrem situacoes que o commit simples nao resolve.

That's all for now.
Thanks for reading!

Top comments (0)