kb.erickguedes.com
Git Completo: do Básico à Certificação

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.