🌿 Git essencial
Controle de versão do zero: entenda o que é git, domine init/add/commit, navegue pelo histórico, trabalhe com branches e aprenda a usar .gitignore. Bônus: deixe o Claude Code fazer os commits por você.
📦 O que é git
Snapshots no tempo — controle de versão distribuído
🎯 Conceito central
Git é um sistema que registra snapshots do seu projeto ao longo do tempo. Pense em um álbum de fotos do seu código: a qualquer momento você pode voltar a qualquer foto — e criar ramificações paralelas sem afetar as outras.
Linha do tempo de commits: main avança, branch paralela não interfere.
✓ Com git
- ✓Desfazer qualquer mudança em segundos
- ✓Trabalhar em features sem quebrar o que funciona
- ✓Histórico completo de quem mudou o quê
- ✓Colaborar sem sobrescrever o trabalho alheio
✗ Sem git
- ✗projeto_final_v2_MESMO_FINAL.zip
- ✗Deletou código que precisava → sem volta
- ✗Dois devs editam o mesmo arquivo → caos
- ✗Não sabe o que mudou desde ontem
🚀 init / add / commit
Os três comandos fundamentais — fluxo que você vai repetir centenas de vezes
git init — criar o repositório
Execute uma vez, na raiz do seu projeto. Cria a pasta oculta .git/ que vai armazenar todo o histórico.
$ cd meu-projeto
$ git init
Initialized empty Git repository in /meu-projeto/.git/
git add — preparar arquivos
Adiciona arquivos à "staging area" — a lista do que vai entrar no próximo commit. Pense como selecionar fotos para um álbum antes de imprimir.
$ git add index.html # arquivo específico
$ git add . # todos os arquivos modificados
$ git add -p # modo interativo (seleciona partes)
git commit — salvar o snapshot
Registra os arquivos staged no histórico com uma mensagem descritiva. Uma vez commitado, nunca se perde.
$ git commit -m "feat: adiciona página de contato"
[main 3a4f8bc] feat: adiciona página de contato
2 files changed, 47 insertions(+)
💡 Dica: git status é seu melhor amigo
Antes de qualquer add/commit, rode git status. Ele mostra exatamente o que está modificado, o que está staged e o que não está rastreado. Elimina a incerteza.
🕐 Histórico e log
Navegar pelo passado do projeto — auditoria, diagnóstico, reversão
O histórico é uma das vantagens mais poderosas do git. Saber o que mudou, quando e por quê transforma depuração de bug de horas para minutos.
$ git log # histórico completo
$ git log --oneline # resumido: hash + msg
$ git log --oneline --graph # com grafo de branches
$ git diff # o que mudou (não staged)
$ git diff --staged # o que vai no próximo commit
$ git diff HEAD~1 # vs commit anterior
$ git show abc1234 # detalhes de um commit específico
$ git blame arquivo.html # quem editou cada linha
⏪ Desfazendo mudanças
git restore arquivo.html — descarta mudanças não commitadas no arquivo
git restore --staged arquivo.html — retira do staging sem descartar
git revert HEAD — cria commit que desfaz o último (seguro para uso em equipe)
git reset --hard HEAD~1 — volta 1 commit (CUIDADO: destrói mudanças locais)
✓ Boas práticas
- ✓Use
git revertpara desfazer em repos compartilhados - ✓Rode
git statusegit diffantes de cada commit - ✓Commite com frequência — commits pequenos são mais fáceis de reverter
✗ Evitar
- ✗Nunca use
--hardem branch compartilhada - ✗Não commite com mensagem vaga ("fix", "update", "wip")
- ✗Não misture várias mudanças não relacionadas em 1 commit
🌿 Branches
Trabalhar em paralelo sem medo de quebrar o que funciona
🌿 Branch é barato no git
Criar uma branch não copia arquivos — é apenas um ponteiro para um commit. Por isso criar e alternar branches é instantâneo, mesmo em projetos grandes.
$ git branch # lista branches
$ git branch feature/login # cria branch
$ git checkout feature/login # muda para branch
$ git checkout -b feature/login # cria E muda (atalho)
$ git switch -c feature/login # alternativa moderna
$ git merge feature/login # mescla na branch atual
$ git branch -d feature/login # deleta branch (já mergeada)
$ git stash # guarda mudanças temporariamente
$ git stash pop # recupera do stash
Feature Branch Flow
Cada nova funcionalidade vive em branch própria. main sempre fica estável. Merge só após revisão e testes.
Conflitos de merge
Quando duas branches editam o mesmo trecho, git para e pede resolução manual. Os marcadores <<<<<<< / ======= / >>>>>>> mostram os dois lados.
git stash — pausa rápida
Precisa mudar de branch mas tem mudanças não commitadas? git stash guarda tudo temporariamente. git stash pop traz de volta.
🚫 .gitignore
O que não versionar — proteger segredos e manter o repo limpo
# Dependências
node_modules/
vendor/
# Segredos e configuração local
.env
.env.local
*.key
credentials.json
# Arquivos de build
dist/
build/
*.min.js
*.min.css
# Sistema operacional
.DS_Store
Thumbs.db
# IDEs
.idea/
.vscode/settings.json
*.swp
⚠️ Nunca commite segredos
Chaves de API, senhas e tokens commitados ficam visíveis no histórico público para sempre — mesmo depois de deletar o arquivo. Use sempre variáveis de ambiente e .gitignore desde o primeiro commit.
✓ Sempre ignorar
- ✓
.enve arquivos de segredos - ✓
node_modules/— instalado via npm - ✓Arquivos de build gerados automaticamente
- ✓Logs e arquivos temporários
🛠️ Comandos úteis
git rm --cached arquivo — para de rastrear
git check-ignore -v *.log — por que está ignorado
gh repo create — já oferece .gitignore template
🤖 Claude Code comita por você
Mensagens de commit profissionais sem esforço — Conventional Commits automáticos
Claude Code executa o ciclo git completo automaticamente ao final de cada tarefa. Mas entender o que ele está fazendo — e ajustar quando necessário — é o que separa um usuário avançado de um iniciante.
# Estrutura: tipo(escopo): descrição imperativa
feat: adiciona autenticação com Google
fix(auth): corrige loop infinito no login
docs: atualiza README com instruções de deploy
style: formata CSS segundo BEM
refactor(api): extrai lógica de validação para util
test: adiciona testes para módulo de pagamento
chore: atualiza dependências para versão segura
🤖 Como pedir ao Claude Code
No final de qualquer tarefa: "Faça commit das mudanças com uma mensagem descritiva."
Para um fluxo completo: "Adicione todos os arquivos, faça commit com mensagem no formato Conventional Commits e push para main."
Claude gera automaticamente algo como: feat(pages): adiciona página de portfólio com grid responsivo
✓ Mensagem boa
- ✓Imperativo: "adiciona", "corrige", "remove"
- ✓Descreve o que faz (não o que você fez)
- ✓Máximo ~72 chars na primeira linha
- ✓Tipo claro: feat/fix/docs/chore
✗ Mensagem ruim
- ✗"fix" — corrigiu o quê?
- ✗"update" — genérico e inútil
- ✗"WIP" commitado na main
- ✗"ajustei umas coisas"
🎯 Resumo do módulo
O que você aprendeu
- ✓Git é um sistema de snapshots — não cópia de arquivos
- ✓Fluxo:
git add→git commit -m "msg" - ✓Histórico com
git log, mudanças comgit diff - ✓Branches para trabalho paralelo seguro
- ✓.gitignore protege segredos e mantém repo limpo
- ✓Claude Code automatiza commits com Conventional Commits
Próximo módulo
Com o git local dominado, o próximo passo é colocar o projeto no GitHub: criar repositório, configurar remote, push, SSH, gh CLI e colaboração com PRs.
Módulo 6.2 — GitHub e repositórios→