Todo desenvolvedor sabe fazer git add, git commit e git push. Mas Git tem recursos avançados que transformam como você colabora em equipe, como você organiza histórico de commits, e como você resolve situações complexas sem entrar em pânico. Esses comandos raramente são ensinados em cursos introdutórios, mas aparecem constantemente no dia a dia profissional — e não saber usá-los significa perder tempo, criar histórico bagunçado ou, no pior caso, perder trabalho.
git stash: salve seu trabalho em andamento sem committar
Situação clássica: você está no meio de uma feature, o código está pela metade e não compila, quando alguém pede para você urgente checar um bug na branch main. Você não pode commitar código quebrado, mas também não quer perder as mudanças. git stash salva todas as mudanças em andamento em um “guardado” temporário e limpa o working directory para o último commit. Você resolve o bug, volta para sua branch, e git stash pop restaura exatamente onde você estava.
git stash list mostra todos os stashes guardados. git stash push -m "feature login incompleta" adiciona um nome descritivo. git stash drop descarta um stash que não precisa mais. Para projetos com muitos contexts sendo trocados, stash bem nomeado é um salva-vidas de organização.
git rebase: histórico linear e limpo
Quando você trabalha em uma branch por alguns dias e a branch principal (main/develop) recebe novos commits de outros membros da equipe, você tem duas opções para integrar essas mudanças: merge (cria um commit de merge que aparece no histórico) ou rebase (reaplica seus commits sobre a ponta atualizada da branch principal, como se você tivesse começado a trabalhar depois das mudanças dos outros).
O resultado do rebase é um histórico linear e limpo — sem os commits de merge que poluem o grafo. git rebase main estando na sua feature branch reaplica cada um dos seus commits sobre o último commit do main. Se houver conflitos, você os resolve commit por commit, o que é mais granular e controlado do que resolver tudo de uma vez em um merge commit. Nunca use rebase em branches públicas (main, develop) que outros desenvolvedores basearam trabalho — só em suas branches privadas de feature.
git rebase -i: reescrevendo o histórico antes do PR
Interactive rebase é um dos comandos mais poderosos do Git. git rebase -i HEAD~5 abre um editor com os últimos 5 commits e permite: squash (juntar múltiplos commits em um), reword (editar a mensagem de um commit), edit (parar naquele commit para fazer mudanças), drop (remover um commit completamente) e reorder (reorganizar a ordem dos commits).
O caso de uso mais comum: você trabalhou em uma feature em 12 commits, muitos deles “WIP”, “fix typo”, “tenta de novo”. Antes de abrir o Pull Request, git rebase -i para juntar esses commits em 2 ou 3 commits bem descritos que contam a história da feature de forma legível. O revisor do PR fica muito mais feliz, e o histórico do projeto permanece informativo.
git cherry-pick: pegar um commit específico
Cherry-pick aplica as mudanças de um commit específico na sua branch atual, sem fazer merge de toda a branch de origem. Útil quando: um bugfix foi commizado na branch de feature e precisa urgente também na main, sem esperar o merge completo da feature; ou quando você quer trazer apenas uma mudança específica de outra branch experimental.
git cherry-pick abc123 (onde abc123 é o hash do commit) aplica aquele commit na branch atual. Você pode cherry-pick de múltiplos commits: git cherry-pick abc123 def456 ghi789. Se houver conflitos, o Git para e permite resolução manual antes de continuar. Use com cuidado — cherry-pick pode criar commits duplicados se a branch de origem for eventualmente mergeada também.
git bisect: encontrar o commit que introduziu o bug
Quando um bug aparece e você não sabe em qual dos últimos 50 commits foi introduzido, git bisect faz busca binária no histórico. Você marca o commit atual como “ruim” e um commit antigo onde o bug não existia como “bom”. O Git faz checkout em um commit do meio — você testa, e diz se é bom ou ruim. A cada resposta, o Git descarta metade do intervalo. Em log₂(50) ≈ 6 iterações, você encontra exatamente o commit culpado. Automatize com git bisect run script_de_teste.sh e o processo roda sozinho.
Git avançado é o tipo de ferramenta que você não precisa até precisar urgente — e quando o momento chega, ter esses comandos memorizados salva horas de pânico. Pratique em repositórios de teste sem risco: crie um repo fake, faça commits bobos, e experimente rebase interativo, cherry-pick e bisect em ambiente seguro antes de precisar deles em produção.
Tem um projeto em mente?
Somos especialistas em transformar ideias em produtos digitais. Apps, sites, automações e IA — vamos construir juntos.