MÓDULO 6.1

🌿 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ê.

6
Tópicos
~40
Minutos
Intermediário
🛠️
Prático
1

📦 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.

A B C D HEAD F1 init feat A fix B feat C main feature/nova-funcao

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
📁
Repositório
Pasta .git com todo histórico
📸
Commit
Snapshot salvo permanentemente
🎯
HEAD
Onde você está agora
🔀
Branch
Linha paralela de trabalho
2

🚀 init / add / commit

Os três comandos fundamentais — fluxo que você vai repetir centenas de vezes

1

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/
2

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)
3

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.

📂
Working Tree
Arquivos no disco agora
🗂️
Staging Area
Preparado para commit
📚
Repository
Histórico permanente
⚛️
Commit Atômico
Uma mudança lógica
3

🕐 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.

COMANDOS DE HISTÓRICO
$ 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 revert para desfazer em repos compartilhados
  • Rode git status e git diff antes de cada commit
  • Commite com frequência — commits pequenos são mais fáceis de reverter

✗ Evitar

  • Nunca use --hard em branch compartilhada
  • Não commite com mensagem vaga ("fix", "update", "wip")
  • Não misture várias mudanças não relacionadas em 1 commit
🔍
git log
Lista de commits
↔️
git diff
Mudanças linha a linha
↩️
git revert
Desfaz com segurança
👤
git blame
Quem mudou cada linha
4

🌿 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.

COMANDOS DE BRANCH
$ 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
1

Feature Branch Flow

Cada nova funcionalidade vive em branch própria. main sempre fica estável. Merge só após revisão e testes.

2

Conflitos de merge

Quando duas branches editam o mesmo trecho, git para e pede resolução manual. Os marcadores <<<<<<< / ======= / >>>>>>> mostram os dois lados.

3

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.

🏠
main
Branch principal estável
⚗️
feature/
Nova funcionalidade
🔧
fix/
Correção de bug
📦
git stash
Mudanças em pausa
5

🚫 .gitignore

O que não versionar — proteger segredos e manter o repo limpo

.gitignore — EXEMPLO REAL
# 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

  • .env e 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

🔒
.env
Nunca commitar
📦
node_modules
Instala via package.json
🌐
gitignore.io
Gera template automático
🌍
Global ignore
~/.gitignore_global
6

🤖 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.

CONVENTIONAL COMMITS — FORMATO PADRÃO
# 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"
🤖
Automatizado
Claude faz o commit
📝
Conventional
feat/fix/docs/chore
🔍
Auditável
Histórico legível
Semântico
Changelog automático

🎯 Resumo do módulo

O que você aprendeu

  • Git é um sistema de snapshots — não cópia de arquivos
  • Fluxo: git addgit commit -m "msg"
  • Histórico com git log, mudanças com git 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