// aula 02 · Git & GitHub
O que é um commit?
Um commit é um registro permanente do estado do projeto naquele momento. Cada commit tem: um hash SHA-1 único (ex: a3f5c2d), a mensagem que você escreveu, autor, data e um ponteiro para o commit anterior. É a unidade básica do histórico Git.
O fluxo completo — do arquivo ao commit
# 1. Ver o que mudou git status # 2. Adicionar ao staging git add index.html # arquivo específico git add css/ # pasta inteira git add . # tudo de uma vez git add -p # escolhe partes do arquivo interativamente # 3. Fazer o commit git commit -m "adiciona página de login" # Atalho: add + commit juntos (só para arquivos já rastreados) git commit -am "corrige typo no header"
Boas mensagens de commit
Corrigindo e desfazendo commits
# Corrigir a mensagem do último commit (antes do push) git commit --amend -m "mensagem corrigida" # Adicionar arquivo esquecido ao último commit git add arquivo-esquecido.txt git commit --amend --no-edit # Desfazer o último commit MAS manter as alterações no staging git reset --soft HEAD~1 # Desfazer o último commit E descartar as alterações git reset --hard HEAD~1 # Criar um commit que desfaz outro (seguro para histórico público) git revert <hash-do-commit>
Apaga os commits E as alterações. Use com cuidado — as mudanças desaparecem para sempre no seu working directory. Nunca use em commits já enviados ao GitHub.
Cria um novo commit que desfaz o anterior — sem apagar o histórico. É a forma segura de desfazer algo que já foi enviado ao repositório remoto.
Viajando pelo histórico
# Ver histórico completo git log git log --oneline git log --oneline --graph --all # com branches em gráfico # Ver o que mudou em um commit específico git show a3f5c2d # Ir para um commit antigo (modo "detetive" — só leitura) git checkout a3f5c2d # Voltar para o estado atual git checkout main # Comparar dois commits git diff a3f5c2d b7e9f1a
Conventional Commits — o padrão da indústria
O Conventional Commits é uma convenção de mensagens de commit amplamente adotada. O formato é: tipo(escopo): descrição — onde o escopo é opcional e indica qual parte do projeto foi afetada. Ferramentas como o GitHub usam esses prefixos para gerar changelogs automáticos.
| Tipo | Quando usar | Exemplo |
|---|---|---|
| feat | Nova funcionalidade para o usuário | feat: adiciona login com Google |
| fix | Correção de um bug | fix: corrige cálculo de desconto no carrinho |
| docs | Mudanças apenas em documentação (README, comentários) | docs: atualiza instruções de instalação |
| style | Formatação, ponto e vírgula, espaços — sem mudança de lógica | style: formata arquivo conforme PEP 8 |
| refactor | Refatoração — nem nova feature, nem correção de bug | refactor: extrai lógica de validação para função |
| test | Adição ou correção de testes automatizados | test: adiciona testes para módulo de pagamento |
| perf | Melhoria de performance sem mudar comportamento | perf: otimiza query de busca de produtos |
| ci | Mudanças em configuração de CI/CD (GitHub Actions, pipelines) | ci: adiciona workflow de deploy automático |
| chore | Tarefas de manutenção que não afetam o código fonte (atualizar dependências, configurações) | chore: atualiza dependências do projeto |
| build | Mudanças no sistema de build ou dependências externas | build: adiciona webpack ao projeto |
| revert | Reverte um commit anterior | revert: feat: adiciona login com Google |
| BREAKING CHANGE | Mudança que quebra compatibilidade com versão anterior — adiciona ! depois do tipo |
feat!: remove suporte ao Python 2 |
O escopo é opcional mas ajuda a localizar onde a mudança aconteceu. Fica entre parênteses depois do tipo:
# Sem escopo git commit -m "feat: adiciona sistema de notificações" # Com escopo (qual módulo/área foi afetada) git commit -m "feat(auth): adiciona login com Google" git commit -m "fix(cart): corrige cálculo de frete grátis" git commit -m "docs(readme): adiciona seção de instalação" git commit -m "style(header): ajusta espaçamento do menu" # Breaking change — adiciona ! e detalha no corpo git commit -m "feat(api)!: endpoint de usuários agora exige token"
semantic-releaseInstale a extensão Conventional Commits no VS Code. Ela abre um guia passo a passo na hora de escrever a mensagem — você escolhe o tipo, escopo e descrição com autocompletar.