A maioria dos desenvolvedores usa menos de 10 comandos Git regularmente. Isso funciona para trabalho solo, mas em times a simplicidade esconde poder que poderia resolver problemas em minutos em vez de horas. Rebase interativo limpa histórico antes de merges, bisect encontra o commit que introduziu um bug em segundos, e hooks automatizam validações que evitam problemas em produção. Git dominado é uma superpotência de engenharia.
Rebase interativo: reescrevendo história com propósito
git rebase -i HEAD~N abre um editor com os últimos N commits, cada um com uma ação: pick (manter), reword (editar mensagem), edit (pausar e modificar), squash (combinar com anterior), fixup (combinar silenciosamente), drop (remover). Antes de abrir um Pull Request, use rebase interativo para: juntar commits de WIP (“wip”, “fix typo”, “forgot to add file”) em um único commit coeso, reordenar commits para que a história faça sentido lógico, e reescrever mensagens desnecessariamente vagas para mensagens descritivas que documentem o “por quê” da mudança.
A regra de ouro: nunca rebase commits que já foram publicados em branches compartilhadas. Rebase reescreve SHA, e forçar push de uma branch compartilhada confunde todo o time. Para branches pessoais de feature que ainda não foram mergeadas, rebase é livre. git pull --rebase como padrão (ao invés de --merge) mantém um histórico linear, eliminando “Merge branch ‘main’ into feature/X” repetitivos que poluem o log. Configure com git config --global pull.rebase true uma vez e esqueça.
git bisect: caçando bugs em tempo recorde
git bisect usa busca binária para encontrar o commit exato que introduziu um bug. Workflow: git bisect start, git bisect bad (versão atual, com bug), git bisect good v1.2 (versão antiga sem o bug). Git faz checkout automático do commit do meio do range — você testa, digita git bisect good ou git bisect bad, e Git avança para o próximo ponto de bisect. Em 10 passos você encontra o commit culpado entre 1.000 commits — versus revisar manualmente o histórico por horas.
Bisect automatizado é ainda mais poderoso: git bisect run ./test.sh executa um script que retorna exit code 0 (bom) ou não-zero (ruim) automaticamente. Git bisect roda o script em cada ponto, sem intervenção humana, e identifica o commit culpado sozinho. Um teste de regressão que falha é o script perfeito para bisect automático. Para projetos grandes com suites de teste rápidas (unit tests), bisect pode isolar o commit problemático em minutos, completamente sem interação.
Reflog: o undo ilimitado
git reflog é o histórico de todas as posições que HEAD já esteve — incluindo commits deletados, rebases, resets e checkouts. Se você fez git reset --hard e perdeu trabalho, não entre em pânico: git reflog mostra o SHA do commit perdido, e git checkout SHA o recupera. Data de expiração padrão é 90 dias — ampla janela para recuperação. Commits “órfãos” (sem branch apontando para eles) ainda existem no objeto store do Git até o próximo garbage collect.
Stash é outra ferramenta subestimada do Git. Além do uso básico de salvar e recuperar trabalho em progresso, git stash list mantém múltiplos stashes identificados, git stash apply stash@{2} aplica um stash específico sem removê-lo, e git stash branch nome-branch stash@{0} cria uma branch a partir de um stash — útil quando o trabalho que você “estashiu” cresceu demais para voltar como patch simples. git stash --include-untracked inclui arquivos novos não rastreados, evitando a surpresa de recuperar um stash e perceber que arquivos novos ficaram de fora.
Hooks para automação e qualidade
Git hooks são scripts executados automaticamente em eventos do Git. pre-commit é o mais útil: rodar linters, formatadores, e validações de segurança antes de cada commit. Com Husky (Node.js) ou pre-commit (Python/qualquer linguagem), configure hooks em segundos e compartilhe com o time via package.json ou .pre-commit-config.yaml. ESLint + Prettier no pre-commit garantem que nenhum código mal formatado entra no repositório. Detectar segredos vazados (API keys, passwords) com ferramentas como gitleaks ou detect-secrets no pre-commit previne o maior vetor de incidentes de segurança em repositórios.
commit-msg hook valida mensagens de commit contra um padrão (Conventional Commits: feat:, fix:, chore:, docs:). Conventional Commits são a base para geração automática de changelogs e versionamento semântico com ferramentas como semantic-release. pre-push hook roda a suite de testes antes de publicar code — última linha de defesa antes do CI/CD. Para times com pull requests obrigatórios, o foco deveria ser nos hooks de pre-commit (local, rápido) em vez de pre-push — feedback imediato é sempre melhor que ter o CI falhar 3 minutos depois.
Tem um projeto em mente?
Somos especialistas em transformar ideias em produtos digitais. Apps, sites, automações e IA — vamos construir juntos.