💡 Key Takeaways
- The 3 AM Production Crisis That Changed How I Think About Git
- The Foundation: Commands You'll Use Every Single Day
- Branching: Your Parallel Universe Toolkit
- Time Travel: Viewing and Navigating History
Vou escrever este artigo de blog especializado para você como um guia abrangente de comandos Git a partir de uma perspectiva em primeira pessoa.
A Crise de Produção das 3 AM que Mudou Como Eu Penso Sobre Git
Jamais esquecerei a noite em que todo o nosso pipeline de deployment quebrou às 3 AM. Eu era um engenheiro DevOps sênior em uma startup fintech, já tinha cinco anos de carreira, e acabara de receber um alerta porque alguém forçou um push para a main e apagou três dias de trabalho de quatro equipes diferentes. Minhas mãos tremiam enquanto eu encarava meu terminal, sabendo que cada segundo contava - tínhamos prazos regulatórios, stakeholders irados e uma equipe de desenvolvedores exaustos esperando que eu consertasse isso.
💡 Principais Conclusões
- A Crise de Produção das 3 AM que Mudou Como Eu Penso Sobre Git
- A Base: Comandos que Você Usará Todos os Dias
- Branching: Seu Conjunto de Ferramentas do Universo Paralelo
- Viagem no Tempo: Visualizando e Navegando pela História
Foi então que percebi algo crucial: eu vinha usando o Git há meia década, mas só conhecia de fato cerca de 20 comandos. Todo o resto era ruído. A documentação do Git lista mais de 160 comandos, mas naquele momento de crise, alcancei as mesmas ferramentas que já havia usado milhares de vezes antes. E sabe de uma coisa? Elas foram suficientes. Elas nos salvaram naquela noite.
Desde então, trabalhei com mais de 200 desenvolvedores em três empresas, conduzi inúmeras revisões de código e resgatei mais repositórios do que consigo contar. Rastreiei meu uso real do Git nos últimos dois anos utilizando análise de histórico de shell, e os dados são impressionantes: 94% das minhas interações com Git envolvem apenas 20 comandos. Os 6% restantes são distribuídos entre dezenas de operações obscuras que eu posso usar uma vez a cada trimestre.
Este artigo não é mais uma referência exaustiva de Git que você vai marcar e nunca ler. Esta é a lista testada em batalha e comprovada em produção de comandos que lidará com 99% do seu trabalho diário. Vou mostrar exatamente como uso cada um, as flags que realmente importam e os modelos mentais que me mantiveram são através de centenas de conflitos de merge e emergências de deployment.
A Base: Comandos que Você Usará Todos os Dias
Vamos começar com o que é absolutamente essencial - os comandos que uso com tanta frequência que meus dedos os digitam sem pensar. Esses cinco comandos formam a espinha dorsal de todo fluxo de trabalho Git, e se você não dominar mais nada, domine esses.
Após analisar dois anos de histórico de shell na minha equipe, descobri algo contra-intuitivo: os desenvolvedores que conheciam menos comandos Git eram muitas vezes mais produtivos. Eles dominavam os 20 essenciais e podiam executá-los sem pensar, enquanto aqueles que memorizavam todo o manual gastavam preciosos segundos deliberando entre opções semelhantes em momentos críticos.
git status é meu companheiro constante. Executando este comando provavelmente 50 vezes por dia, e não estou exagerando. Antes de cada commit, após cada pull, sempre que estou confuso sobre o que está acontecendo - git status é meu primeiro movimento. Ele mostra quais arquivos estão preparados, quais estão modificados, mas não preparados, e quais não estão rastreados. A saída é codificada em cores e incrivelmente legível. Já vi desenvolvedores juniores lutarem por horas com problemas de Git que teriam sido imediatamente óbvios se eles apenas tivessem executado git status.
Aqui está meu fluxo de trabalho: digito git status com tanta frequência que o aliasei para "gs" na minha configuração de shell. Toda vez que mudo de contexto ou volto de uma reunião, git status é como eu me lembro do que estava fazendo. É como um marcador para seu estado atual.
git add é como você prepara alterações para commit. O padrão mais comum é git add ., que prepara tudo no seu diretório atual, mas eu realmente recomendo não usar isto cegamente. Em vez disso, uso git add -p (modo patch) para cerca de 60% dos meus commits. Isso permite que você revise cada alteração interativamente e prepare apenas os trechos que deseja. É mais lento, sim, mas me salvou de commitar códigos de depuração, chaves de API e declarações console.log embaraçosas mais vezes do que consigo contar.
Para trabalho rápido, git add nome-do-arquivo prepara um arquivo específico. Uso isso quando estou confiante sobre o que estou committando. A chave aqui é que preparar é separado de commitar - você pode preparar arquivos progressivamente, revisá-los com git status, e depois commitar quando estiver pronto.
git commit cria uma snapshot das suas alterações preparadas. Eu uso git commit -m "mensagem" para alterações pequenas e óbvias, mas para qualquer coisa substancial, apenas digito git commit e deixo abrir meu editor. Isso me obriga a escrever uma mensagem de commit adequada com uma linha de assunto e corpo. Boas mensagens de commit são documentação para seu futuro eu. Passei incontáveis horas vasculhando o histórico do Git tentando entender por que uma alteração foi feita, e mensagens de commit detalhadas valem seu peso em ouro.
Meu modelo de mensagem de commit: a primeira linha é um resumo conciso (50 caracteres ou menos), depois uma linha em branco, e então uma explicação detalhada do que mudou e por quê. O "porquê" é crucial - o diff mostra o que mudou, mas apenas você pode explicar o raciocínio.
git push envia seus commits para o repositório remoto. Na maioria das vezes, git push é tudo que você precisa. Se você está empurrando um novo branch pela primeira vez, precisará de git push -u origin nome-do-branch para configurar o rastreamento. A flag -u (abreviação de --set-upstream) significa que futuros pushes e pulls neste branch não exigirão que você especifique o nome remoto e o nome do branch.
Uma flag crítica para saber: git push --force-with-lease. Nunca, nunca use git push --force a menos que tenha absoluta certeza de que deseja sobrescrever o histórico remoto. A variante --force-with-lease é mais segura porque falha se outra pessoa tiver empurrado commits que você não tem localmente. Já vi --force apagar o trabalho de toda a equipe. Não seja essa pessoa.
git pull busca alterações do remoto e as mescla no seu branch atual. Eu executo isso toda manhã antes de começar a trabalhar e antes de cada push. O comportamento padrão é bom para a maioria dos casos, mas eu prefiro git pull --rebase porque mantém o histórico mais limpo evitando merges desnecessários. Configurei isso como meu padrão com git config --global pull.rebase true.
Branching: Seu Conjunto de Ferramentas do Universo Paralelo
Branches são onde reside o verdadeiro poder do Git. Eles permitem que você trabalhe em recursos, experimentos e correções em isolamento sem afetar a base de código principal. Eu crio provavelmente 10-15 branches por semana, e esses comandos tornam esse fluxo de trabalho perfeito.
| Categoria do Comando | Frequência de Uso Diário | Valor de Recuperação em Crises |
|---|---|---|
| Operações Básicas (add, commit, push, pull) | 50-80 vezes por dia | Baixo - mas base para tudo |
| Gerenciamento de Branch (checkout, branch, merge) | 15-25 vezes por dia | Médio - essencial para o fluxo de trabalho |
| Histórico & Inspeção (log, diff, status) | 20-30 vezes por dia | Alto - crítico para depuração |
| Desfazer Operações (reset, revert, reflog) | 2-5 vezes por dia | Crítico - salva carreiras às 3 AM |
| Recuperação Avançada (cherry-pick, rebase, stash) | 3-8 vezes por dia | Muito Alto - ferramentas de precisão cirúrgica |
git branch lista todos os seus branches locais. O branch atual é marcado com um asterisco. Eu uso git branch -a para ver branches remotos também, e git branch -d nome-do-branch para deletar branches com os quais terminei. A flag -d é segura - não permitirá que você delete um branch com alterações não mescladas. Se você tiver certeza absoluta de que deseja deletar um branch (talvez tenha sido um experimento que falhou), use git branch -D nome-do-branch.
Eu limpo branches antigos religiosamente. Um repositório com 50 branches obsoletos é confuso e dificulta encontrar o que você está procurando. Toda sexta-feira, executo git branch --merged para ver quais branches foram mesclados na main, e então os deleto. É como limpar sua mesa - simplesmente se sente bem.
git checkout alterna entre