git push origin main
git push-u origin feature/login # definir upstream na primeira vez
Enviar tags para o remoto
git push origin –tags
💡 Dica: git fetch vs git pull
Use git fetch para ver o que mudou antes de integrar. git pull é um atalho para fetch + merge. Para um pull mais limpo, use git pull --rebase.
04
Branches
Branches permitem trabalhar em funcionalidades isoladas sem afetar a linha principal de código.
Reescreve histórico — não usar em branches públicas
Quando usar
Integrar branches compartilhadas (main)
Atualizar branches locais/feature
🔶 Regra de ouro do Rebase
Nunca faça rebase de uma branch pública/compartilhada. Se outros desenvolvedores já se basearam naqueles commits, o rebase vai reescrever os hashes e causar conflitos sérios.
06
Stash
Salve mudanças temporariamente quando precisar trocar de branch sem fazer commit.
Guardar mudanças no stash
git stashgit stash-m“WIP: ajuste no header”
Listar stashes salvos
git stash list
Recuperar último stash
git stash pop # aplica e remove do stashgit stash apply # aplica mas mantém no stash
Limpar stash
git stash drop stash@{0} # remove um específicogit stash clear # remove todos
git diff# mudanças no working dirgit diff–staged# mudanças no stagegit diff main..feature # entre branches
Quem alterou cada linha
git blame arquivo.txt
Buscar no histórico
git log–grep=“login”# buscar em mensagens de commitgit log-S“funcaoX”# buscar mudanças no código
08
Git Workflow
O fluxo mais comum em equipes profissionais é o Git Flow (ou variações dele). Abaixo, as branches e seus propósitos:
Branch
Propósito
Criada a partir de
main
Código em produção, sempre estável
—
develop
Integração de features, base para o próximo release
main
feature/*
Desenvolvimento de funcionalidades novas
develop
release/*
Preparação para release (bugfixes finais, versão)
develop
hotfix/*
Correções urgentes em produção
main
Fluxo de uma Feature
develop
→
feature/*
→
commits
→
PR / Code Review
→
merge → develop
Fluxo prático de uma feature
# 1. Criar branch a partir de developgit switch develop
git pull origin develop
git switch-c feature/carrinho
# 2. Trabalhar, commitargit add .
git commit-m“feat: adicionar componente de carrinho”# 3. Atualizar com develop (rebase para histórico limpo)git fetch origin
git rebase origin/develop
# 4. Enviar e abrir Pull Requestgit push-u origin feature/carrinho
💡 Alternativas ao Git Flow
Para projetos menores ou com deploys contínuos, considere o GitHub Flow (branches de feature diretamente de main) ou o Trunk-Based Development (commits pequenos e frequentes direto na main com feature flags).
09
Conventional Commits
Uma convenção para mensagens de commit que facilita changelogs automáticos, versionamento semântico e comunicação clara entre o time.
Estrutura da mensagem
<tipo>(escopo opcional): descrição curta# Corpo (opcional) — explica O QUÊ e POR QUÊ# Rodapé (opcional) — BREAKING CHANGE, referências
Tipos principais
feat
Nova funcionalidade para o usuário
fix
Correção de bug
docs
Alteração apenas em documentação
style
Formatação, ponto e vírgula, espaços (sem mudar lógica)
refactor
Refatoração sem alterar comportamento
test
Adicionar ou corrigir testes
chore
Tarefas de build, CI, dependências
perf
Melhoria de performance
Exemplos práticos
Feature simples
feat(auth): adicionar login com Google OAuth
Correção com escopo
fix(cart): corrigir cálculo do frete para região Sul
Breaking change
feat(api)!: migrar endpoints para v2
BREAKING CHANGE: rotas /api/v1/* foram removidas.
Use /api/v2/* com o novo formato de autenticação.
Referência a issue
fix(ui): corrigir overflow no menu mobile
Closes #142
💡 Ferramentas úteis
Use commitlint + husky para validar mensagens automaticamente, e standard-version ou semantic-release para gerar changelogs e bumps de versão a partir dos commits.