O que Automação de Fluxo de Trabalho Git faz?
Automação completa do fluxo de trabalho Git para o ciclo de vida de desenvolvimento de funcionalidades, desde a criação do branch até o merge.
Visão Geral
Esta skill automatiza o fluxo de trabalho completo de desenvolvimento de funcionalidades:
- Criar branch de funcionalidade a partir do branch padrão
- Fazer commit das alterações com commits convencionais com emoji
- Enviar para o remoto
- Criar PR com template markdown estruturado
- Verificar revisões — aguardar comentários de revisão de código
- Avaliar e corrigir — categorizar e corrigir cada comentário
- Enviar correções e responder — enviar alterações, responder a cada comentário
- Loop — verificar novamente se há novos feedbacks sobre as correções
- Monitorar status (UNSTABLE -> CLEAN)
- Fazer merge do PR (squash + excluir branch)
- Limpeza dos branches local e remoto
⚠️ OBRIGATÓRIO: Ao executar o fluxo completo, TODAS as 11 etapas DEVEM ser executadas sequencialmente. NÃO pare após criar o PR (Etapa 4). As etapas 5 a 11 (revisão, correção, merge, limpeza) são partes obrigatórias do fluxo, não acompanhamentos opcionais. Continue de cada etapa para a próxima sem parar.
Acionando a Skill
Use linguagem natural para invocar qualquer parte do fluxo:
Fluxo Completo
- "Complete o fluxo de trabalho Git para a funcionalidade X"
- "Crie branch de funcionalidade, faça commit, crie PR e faça merge"
- "Execute o ciclo completo de PR"
Etapas Individuais
- "Crie um branch de funcionalidade para X"
- "Faça commit das minhas alterações com commits convencionais com emoji"
- "Crie um PR com template estruturado"
- "Monitore o status do meu PR"
- "Faça o merge do PR e limpe"
Tratamento de Revisões
- "Verifique comentários do PR e resolva-os"
- "Corrija comentários de revisão no PR #123"
- "Responda ao feedback no PR atual"
Etapa 1: Criar Branch de Funcionalidade
# Detecta o branch padrão (main, master, etc.)
DEFAULT_BRANCH=$(git remote show origin 2>/dev/null | grep 'HEAD branch' | sed 's/.*: //' || echo "main")
git checkout "$DEFAULT_BRANCH"
git pull origin "$DEFAULT_BRANCH"
git checkout -b feat/nome-descritivo
Convenções de nomenclatura de branches:
feat/- Novas funcionalidadesfix/- Correções de bugsdocs/- Alterações na documentaçãorefactor/- Refatoração de códigoperf/- Melhorias de desempenhotest/- Adição/alteração de testeschore/- Tarefas de manutençãoci/- Alterações em CI/CD
Etapa 2: Commits com Emoji e Convencionais
Preparar e Fazer Commit
git add <arquivos>
git commit -m "<emoji> <tipo>[escopo opcional]: <descrição>"
Tipos de Commit e Emojis
| Tipo | Emoji | Descrição | Exemplo |
|---|---|---|---|
feat | ✨ | Nova funcionalidade | ✨ feat(auth): adicionar validação de token JWT |
fix | 🐛 | Correção de bug | 🐛 fix(api): resolver vazamento de memória no handler |
docs | 📝 | Documentação | 📝 docs: atualizar documentação de endpoints da API |
style | 🎨 | Estilo de código | 🎨 style: formatar código com prettier |
refactor | ♻️ | Refatoração de código | ♻️ refactor: simplificar lógica de autenticação |
perf | ⚡️ | Desempenho | ⚡️ perf: otimizar desempenho de consulta no banco |
test | ✅ | Testes | ✅ test: adicionar testes unitários para serviço de usuário |
chore | 🔧 | Manutenção | 🔧 chore: atualizar dependências de build |
ci | 👷 | CI/CD | 👷 ci: adicionar workflow do GitHub Actions |
build | 📦 | Sistema de build | 📦 build: atualizar para webpack 5 |
revert | ⏪ | Reverter | ⏪ revert: reverter integração de pagamento |
Formato da Mensagem de Commit
Simples (padrão):
✨ feat(auth): adicionar validação de token JWT
Completo (com corpo):
✨ feat(auth): adicionar validação de token JWT
Implementar middleware de validação de token JWT que:
- Valida a assinatura e expiração do token
- Extrai claims do usuário do payload
- Adiciona contexto do usuário ao objeto de requisição
Isso melhora a segurança garantindo que todas as rotas protegidas
validem tokens de autenticação corretamente.
Co-authored-by: Claude <[email protected]>
Melhores Práticas
- ✅ Use tempo presente, modo imperativo ("adicione" e não "adicionou")
- ✅ Mantenha a primeira linha com menos de 50 caracteres (72 no máximo)
- ✅ Comece com letra maiúscula
- ✅ Sem ponto final na linha de assunto
- ✅ Use escopo para contexto (ex:
feat(auth):) - ✅ Inclua rodapé
Co-authored-by:para commits assistidos por IA
Etapa 3: Enviar para o Remoto
git push -u origin feat/nome-descritivo
Etapa 4: Criar PR com Template Estruturado
Antes de criar o PR, analise as alterações reais:
# Veja todas as alterações neste branch em relação ao branch padrão
git diff "$DEFAULT_BRANCH"...HEAD
# Veja as mensagens de commit
git log "$DEFAULT_BRANCH"..HEAD --pretty=format:"%s"
Você DEVE gerar o título e o corpo do PR a partir do diff real — nunca use texto de espaço reservado.
- Título: Use o emoji e o tipo do commit principal (ex:
✨ feat:,🐛 fix:). Inclua o emoji. - Corpo: Preencha cada seção com conteúdo REAL derivado do diff. Não escreva
[Resumo de uma linha]ou[Primeira alteração]— escreva descrições reais das alterações.
gh pr create \
--title "<EMOJI> <TIPO>: <descrição breve>" \
--body "$(cat <<EOF
## 📝 Resumo
[Escreva um RESUMO REAL de uma frase com base no diff real]
## 🔄 Alterações
[Liste cada alteração significativa como um ponto de lista com prefixo de emoji. Baseie-se na saída do git diff]
## ✅ Verificação
[Forneça etapas de verificação específicas e executáveis baseadas no que realmente mudou]
## 🔗 Fontes
[Inclua links relevantes: referências de issues (Closes #N), documentação, PRs relacionados. Remova a seção se não houver]
---
🤖 Gerado com [Claude Code](https://claude.com/claude-code)
EOF
)""
Exemplos de Template de PR
PR de Funcionalidade:
## 📝 Resumo
Adicionar fluxo de autenticação OAuth2 com suporte aos provedores Google e GitHub.
## 🔄 Alterações
- ✨ Adicionar fluxo de código de autorização OAuth2 com PKCE
- 🔐 Implementar armazenamento seguro de tokens com cookies criptografados
- 📝 Adicionar sincronização de perfil de usuário no primeiro login
- 🎨 Atualizar UI de login com botões de provedores
## ✅ Verificação
1. Execute localmente: `npm run dev`
2. Visite `/login` e clique em "Fazer login com Google"
3. Complete o fluxo OAuth
4. Verifique se o perfil do usuário foi criado corretamente
5. Verifique se a atualização do token funciona ao recarregar a página
```bash
# Suite de testes
npm run test:auth
🔗 Fontes
- Fecha #456
- RFC OAuth 2.1: https://datatracker.ietf.org/doc/html/rfc6749
- Documento de design: docs/design/oauth2-integration.md
**PR de Correção de Bug:**
```markdown
## 📝 Resumo
Corrigir vazamento de memória no handler de eventos que causava aumento de uso de memória ao longo do tempo.
## 🔄 Alterações
- 🐛 Corrigir listener de evento que não era removido corretamente
- ✅ Adicionar limpeza em componentWillUnmount
- 📝 Adicionar documentação para ciclo de vida do handler de eventos
## ✅ Verificação
1. Abra DevTools do navegador → Memória
2. Tire um snapshot do heap
3. Navegue pelo aplicativo 10 vezes
4. Tire outro snapshot
5. Verifique se não há nós DOM destacados
## 🔗 Fontes
- Corrige #789
- Issue relacionada: #123
Etapa 5: Verificar Revisões de Código
Aguarde a conclusão das revisões de código antes de verificar os comentários:
echo "⏳ Aguardando revisões de código..."
sleep 180
Buscar Comentários de Revisão
# Resolve o slug do repositório
REPO_SLUG=$(gh repo view --json nameWithOwner --jq '.nameWithOwner')
# Lista PRs
gh pr list
# Visualiza detalhes do PR
gh pr view <NUMERO_DO_PR>
# Obtém comentários de revisão inline no código (filtra respostas para obter apenas originais)
gh api repos/$REPO_SLUG/pulls/$NUMERO_DO_PR/comments --jq '.[] | select(.in_reply_to_id == null) | {id: .id, path: .path, line: .line, body: .body}'
# Obtém comentários em nível de issue (comentários gerais do PR)
gh api repos/$REPO_SLUG/issues/$NUMERO_DO_PR/comments --jq '.[] | {id: .id, body: .body}'
# Obtém estado da revisão
gh pr view $NUMERO_DO_PR --json reviews --jq '.reviews[] | {state: .state, body: .body, author: .author.login}'
Etapa 6: Avaliar e Corrigir Comentários de Revisão
Categorizar Cada Comentário
| Categoria | Ação | Exemplos |
|---|---|---|
| Deve corrigir | Alteração de código necessária | Bugs, problemas de segurança, erros de lógica, testes quebrados |
| Deveria corrigir | Alteração de código recomendada | Estilo de código, nomenclatura, tratamento de erro ausente |
| Sugestão | Opcional, aplique julgamento | Abordagens alternativas, padrões mais elegantes |
| Pergunta | Apenas responder, sem alteração no código | Revisor pedindo esclarecimento |
| Já resolvido | Apenas responder | Comentário se refere a código já corrigido |
Processo para Cada Comentário
- Leia o arquivo referenciado no número de linha especificado
- Faça a correção mínima necessária para atender ao feedback
- Prepare e faça commit com o emoji de commit apropriado
- Rastreie o ID do comentário para responder depois
# Faça a correção
# ... alterações no código ...
# Faça commit da correção
git add <arquivos-alterados>
git commit -m "🐛 fix: corrigir feedback da revisão - tratar caso extremo"
Etapa 7: Enviar Correções e Responder a Todos os Comentários
Após todas as correções serem commitadas:
# Envie todos os commits de correção
git push
Antes de responder, calcule o hash da correção:
FIX_HASH=$(git rev-parse --short HEAD)
Então, para cada comentário, responda usando a variável de shell $FIX_HASH e o id numérico literal da busca da Etapa 5:
# Responder a comentário de revisão inline
gh api repos/$REPO_SLUG/pulls/$NUMERO_DO_PR/comments \
--method POST \
--field body="✅ Corrigido em $FIX_HASH. <descreva o que foi realmente alterado>" \
--field in_reply_to=$ID_COMENTARIO
# Responder a comentário geral do PR (nota: a API do GitHub cria um novo comentário de nível superior, não uma resposta encadeada — isso é uma limitação da API)
gh api repos/$REPO_SLUG/issues/$NUMERO_DO_PR/comments \
--method POST \
--field body="✅ Resolvido em $FIX_HASH. <descreva o que foi realmente alterado>"
Formato de resposta:
- Correções:
✅ Corrigido em <hash_curto> — <o que foi alterado> - Perguntas:
💡 <resposta> - Sugestões não aplicadas:
🙏 Boa sugestão, mas <motivo>. Feliz em revisitar se necessário.
Etapa 8: Loop — Verificar Novamente Novos Feedbacks
Após enviar as correções:
# Re-buscar comentários e comparar com IDs já processados
gh api repos/$REPO_SLUG/pulls/$NUMERO_DO_PR/comments --jq '.[] | select(.in_reply_to_id == null) | .id'
- Se novos IDs de comentários forem encontrados → repita a partir da Etapa 6
- Se não houver novos comentários → prossiga para a Etapa 9
Respostas Comuns de Revisão
| Tipo de Comentário | Abordagem de Resposta |
|---|---|
| Estilo de código | Corrigir + commit 🎨 style: |
| Relatório de bug | Corrigir + commit 🐛 fix: |
| Testes ausentes | Adicionar testes + commit ✅ test: |
| Documentação | Atualizar docs + commit 📝 docs: |
| Desempenho | Otimizar + commit ⚡️ perf: |
| Refatoração | Refatorar + commit ♻️ refactor: |
Etapa 9: Monitorar Status do PR (UNSTABLE -> CLEAN)
Use este loop de monitoramento para aguardar a aprovação de todas as verificações de CI:
#!/bin/bash
NUMERO_DO_PR="<NUMERO_DO_PR>"
for i in {1..60}; do
pr_status=$(gh pr view $NUMERO_DO_PR --json mergeStateStatus --jq '.mergeStateStatus')
if [ "$pr_status" = "CLEAN" ]; then
echo "✅ Todas as verificações passaram! Pronto para merge."
exit 0
fi
echo "⏳ Aguardando... ($i/60) - status: $pr_status"
sleep 10
done
echo "❌ Tempo limite excedido - as verificações não passaram em 10 minutos"
exit 1
Status possíveis:
UNKNOWN- Status ainda não determinadoBEHIND- Branch está atrás do branch baseBLOCKED- Bloqueado por verificações com falhaDIRTY- Conflito de mergeDRAFT- PR está em estado de rascunhoUNSTABLE- As verificações ainda não passaramCLEAN- Todas as verificações passaram, pronto para merge
Etapa 10: Fazer Merge do PR (Squash + Excluir Branch)
gh pr merge <NUMERO_DO_PR> --squash --delete-branch
Nota: Omitir --subject permite que o GitHub use o título do PR como padrão, que já tem o prefixo de emoji/tipo correto.
Opções de merge:
--squash- Combinar todos os commits em um (recomendado)--merge- Fazer merge com histórico completo de commits--rebase- Rebase dos commits no branch base--delete-branch- Excluir branch após o merge
Etapa 11: Limpeza dos Branches Local e Remoto
# Voltar para o branch padrão
git checkout "$DEFAULT_BRANCH"
# Puxar as alterações mais recentes
git pull origin "$DEFAULT_BRANCH"
# Excluir branch local
git branch -d feat/nome-descritivo
# Forçar exclusão se necessário
git branch -D feat/nome-descritivo
# Excluir branch remoto (se ainda não foi excluído)
git push origin --delete feat/nome-descritivo
Script de Fluxo Completo
Aqui está um script completo que combina o fluxo completo (monitoramento, correção, merge, limpeza):
#!/bin/bash
set -e
NUMERO_DO_PR="<NUMERO_DO_PR>"
REPO_SLUG=$(gh repo view --json nameWithOwner --jq '.nameWithOwner')
# Etapa 5: Aguardar revisões
echo "⏳ Aguardando 120 segundos para revisões de código..."
sleep 180
# Etapas 6-8: Loop de correção (máximo 5 iterações)
PROCESSED_IDS=""
MAX_ITERATIONS=5
iteration=0
while [ $iteration -lt $MAX_ITERATIONS ]; do
iteration=$((iteration + 1))
COMMENT_IDS=$(gh api repos/$REPO_SLUG/pulls/$NUMERO_DO_PR/comments --jq '.[] | select(.in_reply_to_id == null) | .id')
NEW_IDS=$(comm -23 <(echo "$COMMENT_IDS" | sort) <(echo "$PROCESSED_IDS" | sort) || true)
if [ -z "$NEW_IDS" ]; then
echo "✅ Nenhum novo comentário de revisão."
break
fi
echo "📝 Novos comentários de revisão encontrados. Resolvendo..."
# (Claude Code avalia e corrige cada comentário aqui)
git push
PROCESSED_IDS="${PROCESSED_IDS}
${NEW_IDS}"
echo "⏳ Aguardando CI e re-revisão..."
sleep 60
done
if [ $iteration -ge $MAX_ITERATIONS ]; then
echo "⚠️ Número máximo de iterações de correção atingido. Pode ser necessária revisão manual."
fi
# Etapa 9: Monitorar status do PR
echo "🔍 Monitorando status do PR #$NUMERO_DO_PR..."
HEAD_BRANCH=$(gh pr view $NUMERO_DO_PR --json headRefName --jq '.headRefName')
for i in {1..60}; do
pr_status=$(gh pr view $NUMERO_DO_PR --json mergeStateStatus --jq '.mergeStateStatus')
if [ "$pr_status" = "CLEAN" ]; then
echo "✅ Todas as verificações passaram!"
break
fi
echo "⏳ Aguardando... ($i/60) - status: $pr_status"
sleep 10
done
# Etapa 10: Fazer merge do PR
echo "🔀 Fazendo merge do PR #$NUMERO_DO_PR..."
gh pr merge $NUMERO_DO_PR --squash --delete-branch
# Etapa 11: Limpeza
echo "🧹 Limpando..."
git checkout "$DEFAULT_BRANCH"
git pull origin "$DEFAULT_BRANCH"
git branch -D "$HEAD_BRANCH" 2>/dev/null || true
echo "✅ Pronto! Pronto para próxima funcionalidade."
Comandos de Referência Rápida
Operações com Branch
git checkout -b feat/nome-da-funcionalidade # Criar branch de funcionalidade
git checkout "$DEFAULT_BRANCH" && git pull # Sincronizar com branch padrão
git br
… (truncado para tradução)