Todos Desfazer Branches Remoto Stash Histórico Merge

Referência de Situações e Comandos Git

O Git é poderoso, mas sua sintaxe pode ser difícil de memorizar, especialmente para operações menos comuns. Esta ferramenta mapeia situações reais do Git para os comandos exatos, com explicações claras e avisos para operações que não podem ser desfeitas.

Operações Destrutivas vs Seguras no Git

Algumas operações do Git são seguras e reversíveis (commits, branches, stashes). Outras alteram permanentemente o histórico ou podem causar perda de dados se usadas sem cuidado:

  • Seguras: git stash, git branch, git checkout, git merge, git commit
  • Requerem cuidado: git reset --hard, git push --force, git rebase (reescreve o histórico), git clean -fd
  • Nunca faça em branches compartilhadas: force-push para main/master, rebase de commits públicos

Boas Práticas do Git

  • Sempre crie uma branch antes de fazer alterações — nunca trabalhe diretamente na main
  • Faça commits frequentes com mensagens claras e descritivas
  • Use git status e git diff antes de fazer commit
  • Prefira git revert em vez de git reset --hard em branches compartilhadas
  • Use git stash para salvar trabalho em andamento temporariamente

Workflows Git para Equipes: Escolhendo a Estratégia Certa

Escolher o workflow Git certo é uma das decisões mais impactantes para a produtividade da equipe. O workflow errado cria conflitos de merge, bloqueia deploys e atrasa a revisão de código.

Estratégias Populares de Branching em Git

  • GitHub Flow: Simples e eficaz. Cria branches feature a partir do main, abre PRs, faz merge após revisão. Melhor para equipes com deploy contínuo e releases pequenos e frequentes. Usado por GitHub, Shopify e muitas startups.
  • GitFlow: Usa branches develop, feature, release e hotfix. Mais estruturado mas pesado. Melhor para equipes com releases programados (apps mobile, software empresarial).
  • Desenvolvimento Baseado em Trunk: Todos commitam no main (trunk) frequentemente, usando branches feature de curta vida (1-2 dias máx). Requer feature flags para trabalho incompleto. Usado por Google, Facebook e Netflix.

Comandos Git que Todo Desenvolvedor Deve Dominar

  • git rebase -i: O rebase interativo permite squash, reordenar, editar e remover commits antes do push. Essencial para histórico de commits limpo. Use git rebase -i HEAD~5 para reestruturar seus últimos 5 commits.
  • git bisect: Busca binária entre commits para encontrar qual introduziu um bug. Automatizável com git bisect run <test-command>. Pode encontrar um bug em 1000 commits com apenas 10 passos.
  • git stash: Guarda temporariamente as mudanças para trocar de branch. Use git stash push -m "descrição" com uma mensagem para lembrar o conteúdo de cada stash.
  • git reflog: Sua rede de segurança — mostra cada movimento do HEAD, mesmo após resets e rebases. Se perder commits, git reflog pode recuperá-los em até 90 dias.

Perguntas Frequentes sobre Git

Como desfazer meu último commit no Git sem perder as alterações?

Use git reset --soft HEAD~1 para desfazer o último commit mantendo todas as alterações na área de staging. Use git reset HEAD~1 (modo mixed, o padrão) para desfazer o commit e remover as alterações do staging, mantendo-as no diretório de trabalho. Use git reset --hard HEAD~1 apenas se quiser descartar permanentemente todas as alterações — essa operação não pode ser desfeita.

Como deletar uma branch local e remota?

Delete uma branch local com git branch -d nome-da-branch (seguro, exige que a branch tenha sido mesclada) ou git branch -D nome-da-branch (forçar exclusão). Delete uma branch remota com git push origin --delete nome-da-branch. Para limpar referências remotas obsoletas, execute git fetch --prune ou git remote prune origin.

Qual é a diferença entre git merge e git rebase?

git merge cria um novo commit de merge unindo duas branches e preservando o histórico completo. git rebase reaplica seus commits sobre outra branch, produzindo um histórico linear mais limpo. Use merge para branches públicas e compartilhadas — é seguro e não destrutivo. Use rebase apenas em branches de feature locais antes de mesclar. Nunca faça rebase de commits já enviados para uma branch remota compartilhada — isso reescreve o histórico e causa problemas para outros colaboradores.

Como ver o que mudou no último commit?

Use git show para ver o diff do commit mais recente, incluindo mensagem, autor, data e patch completo. Para um resumo sem o diff completo, use git show --stat. Para comparar dois commits específicos, use git diff commit1 commit2. Para ver o histórico de um arquivo específico, use git log --follow -p -- nome-do-arquivo.

Ferramentas Relacionadas