📖 O que é Git?
Git é um sistema de controle de versão distribuído criado por Linus Torvalds em 2005. Ele rastreia mudanças no código, permite colaboração entre times e mantém o histórico completo do projeto.
Snapshots, não diffs
Git armazena snapshots do estado completo dos arquivos a cada commit, não apenas as diferenças.
Distribuído
Cada desenvolvedor tem uma cópia completa do repositório — trabalhe offline sem problemas.
Integridade SHA-1
Todo objeto Git é identificado por um hash SHA-1 — impossível alterar histórico sem detecção.
Branches baratos
Criar uma branch em Git é instantâneo — apenas um ponteiro para um commit.
Instalação e Configuração
# Ubuntu/Debian sudo apt install git # macOS brew install git # Configuração inicial (obrigatória) git config --global user.name "Seu Nome" git config --global user.email "seu@email.com" git config --global core.editor "code --wait" git config --global init.defaultBranch main # Verificar configuração git config --list
⚡ Comandos Essenciais
Os comandos que você vai usar todos os dias.
# Iniciar repositório git init # Clonar repositório existente git clone https://github.com/user/repo.git # Ver status dos arquivos git status # Adicionar ao staging git add arquivo.txt # arquivo específico git add . # todos os arquivos git add -p # interativo (recomendado) # Criar commit git commit -m "feat: adiciona login com OAuth" # Ver histórico git log --oneline --graph --all # Enviar para remoto git push origin main # Baixar atualizações git pull origin main
Use prefixos padronizados: feat:, fix:, docs:, chore:, refactor:, test:. Facilita changelogs automáticos e leitura do histórico.
🌿 Branches & Merge
Branches permitem desenvolver features isoladas sem afetar o código principal.
# Criar e mudar para nova branch git checkout -b feature/login # Listar branches git branch -a # Merge (integra branch na atual) git checkout main git merge feature/login # Merge sem fast-forward (preserva histórico) git merge --no-ff feature/login # Deletar branch após merge git branch -d feature/login git push origin --delete feature/login
Quando dois branches editam a mesma linha, Git marca o conflito com <<<<<<<. Edite o arquivo, remova os marcadores e faça git add + git commit para resolver.
🚀 Comandos Avançados
Rebase, stash, cherry-pick e outras ferramentas poderosas.
# Rebase — reescreve histórico linearmente git rebase main git rebase -i HEAD~3 # interativo: squash, reword, drop # Stash — salva trabalho temporariamente git stash git stash pop git stash list # Cherry-pick — aplica commit específico git cherry-pick a1b2c3d # Desfazer último commit (mantém arquivos) git reset --soft HEAD~1 # Reverter commit público (seguro) git revert a1b2c3d # Ver quem alterou cada linha git blame arquivo.js # Buscar commit que introduziu bug git bisect start git bisect bad git bisect good v1.0
Nunca faça rebase em branches públicas/compartilhadas. Use rebase apenas em branches locais antes de fazer push.
🔄 Fluxos de Trabalho
Estratégias de branching para times de diferentes tamanhos.
Git Flow
Branches: main, develop, feature/*, release/*, hotfix/*. Ideal para projetos com releases versionadas.
Trunk-Based Development
Todos commitam direto na main com feature flags. Ideal para CI/CD contínuo e times ágeis.
GitHub Flow
Branch por feature + Pull Request para main. Simples e eficaz para a maioria dos projetos.
GitLab Flow
Combina feature branches com environment branches (staging, production). Ótimo para deploys controlados.
📋 Cheat Sheet Completo
Referência rápida dos comandos mais usados.
| Comando | O que faz |
|---|---|
| git init | Inicializa repositório Git no diretório atual |
| git clone <url> | Clona repositório remoto localmente |
| git status | Mostra estado dos arquivos (staged, modified, untracked) |
| git add -p | Adiciona mudanças interativamente (recomendado) |
| git commit -m "" | Cria commit com mensagem |
| git log --oneline | Histórico compacto de commits |
| git diff | Mostra diferenças não staged |
| git diff --staged | Mostra diferenças staged (prontas para commit) |
| git branch -b <nome> | Cria e muda para nova branch |
| git merge <branch> | Integra branch na branch atual |
| git rebase <branch> | Reaplica commits sobre outra base |
| git stash | Salva mudanças temporariamente |
| git stash pop | Restaura último stash |
| git reset --soft HEAD~1 | Desfaz último commit, mantém arquivos staged |
| git revert <hash> | Cria commit que reverte outro (seguro para remoto) |
| git cherry-pick <hash> | Aplica commit específico na branch atual |
| git tag v1.0.0 | Cria tag no commit atual |
| git remote -v | Lista repositórios remotos configurados |
| git fetch --all | Baixa todas as atualizações sem fazer merge |
🎮 Git Playground
Pratique comandos Git diretamente no browser — sem instalar nada. O repositório é simulado em memória.
