Git Stash e Ferramentas Avançadas
Aula 11 de 12
git stash — Guardando Mudanças Temporárias
Permite salvar alterações não commitadas para limpar o working directory temporariamente:
# Guardar mudanças atuais (só tracked files)
git stash
# Guardar incluindo untracked files
git stash -u
# Guardar com mensagem descritiva
git stash push -m "wip: ajuste na autenticação"
Gerenciando Stashes
# Listar stashes
git stash list
# stash@{0}: On feature: wip: ajuste na autenticação
# stash@{1}: On main: teste de API
# Aplicar stash (mantém na lista)
git stash apply stash@{0}
# Aplicar e remover da lista
git stash pop
# Remover stash específico
git stash drop stash@{0}
# Limpar todos os stashes
git stash clear
git tag — Marcando Versões
Tags marcam pontos específicos no histórico (geralmente releases):
# Tag leve (só ponteiro)
git tag v1.0.0
# Tag anotada (com metadados)
git tag -a v1.0.0 -m "Release 1.0.0 - Versão estável"
# Listar tags
git tag
git tag -l "v1.*"
# Enviar tags para o remoto
git push origin v1.0.0
git push --tags # todas as tags
# Fazer checkout de uma tag
git checkout v1.0.0
git bisect — Encontrando Bugs
Busca binária para encontrar qual commit introduziu um bug:
# Iniciar bisect
git bisect start
# Marcar commit atual como ruim
git bisect bad
# Marcar um commit antigo como bom
git bisect good abc123
# O git vai fazendo checkout automaticamente
# Teste em cada passo e marque:
git bisect good # se o bug não aparece
git bisect bad # se o bug aparece
# Quando encontrar:
# abcdef01 is the first bad commit
# Encerrar
git bisect reset
git reflog — O Diário de Bordo
Registra TUDO que você fez no repositório (mesmo commits "perdidos"):
git reflog
# a1b2c3 HEAD@{0}: commit: feat: adiciona login
# d4e5f6 HEAD@{1}: rebase: checkout main
# g7h8i9 HEAD@{2}: commit: wip teste
Útil para recuperar de acidentes:
# Recuperar commit que parecia perdido
git checkout HEAD@{2}
# Criar branch apontando para um estado antigo
git branch recuperar-branch HEAD@{2}
git clean — Removendo Arquivos Não Rastreados
# Simular (mostra o que seria apagado)
git clean -n
# Remover untracked files
git clean -f
# Remover untracked files + pastas
git clean -fd
Stash é essencial para pausar uma tarefa e atender outra urgente sem perder o progresso.