Commitar em lotes
Divida o trabalho não commitado em commits lógicos. Cada commit deve ser revisável por si só e incluir todos os arquivos necessários para que aquela parte faça sentido.
Segurança (sempre)
- Nunca atualize a configuração do Git.
- Nunca faça force-push, hard reset ou outras operações destrutivas no Git, a menos que o usuário peça explicitamente.
- Nunca pule hooks (
--no-verify, etc.), a menos que o usuário peça explicitamente. - Nunca adicione segredos (
.env, credenciais, chaves) ao stage. Avise e exclua-os. - Nunca use
git commit --amenda menos que as regras do usuário para amend sejam totalmente atendidas. - Se um hook de commit falhar, corrija o problema e crie um novo commit; não altere um commit com falha.
- Não adicione
Co-authored-by: Cursoràs mensagens de commit.
1. Inspecionar
Execute em paralelo quando possível:
git statusgit diffegit diff --stagedgit log -5 --onelinepara o estilo da mensagemgit remote -ve rastreamento de branch (git status -sb)
Se não houver nada para commitar, pare e informe.
2. Planejar lotes
Agrupe as alterações por propósito, não apenas por tipo de arquivo. Exemplos:
- Uma funcionalidade ou comportamento voltado ao usuário + seus testes e documentos
- Uma correção de bug + apenas os arquivos que a corrigem
- Refatoração que fique isolada sem misturar funcionalidades não relacionadas
- Tarefa de manutenção ou ferramenta com escopo em uma área (dependências, CI, configuração)
Regras:
- Não misture funcionalidades não relacionadas em um único commit.
- Inclua arquivos complementares no mesmo lote (ex.: esquema + entidade + migração + chamadas para uma alteração).
- Se um arquivo tocar em duas preocupações, prefira o lote dominante ou mencione a compensação antes de commitar.
- Liste os lotes em ordem: fundamentos primeiro (tipos compartilhados, configuração), depois funcionalidades, e por último apenas documentos se dependerem de commits anteriores.
Mostre ao usuário um plano curto: número do lote, arquivos ou caminhos, assunto do commit convencional proposto. Em seguida, prossiga a menos que ele se oponha.
3. Commitar cada lote
Para cada lote, sequencialmente:
- Faça stage apenas desse lote (
git addcaminhos específicos; evitegit add -Aa menos que toda a árvore seja um lote). - Verifique novamente com
git diff --stagedse nada não relacionado entrou. - Escreva um assunto de Commit Convencional (
feat,fix,chore,docs,refactor,test, etc.) focado no porquê. - Se o nome da branch contiver um ID de issue, anexe
#<issue>ao assunto (estilo GitLab). - Faça commit. No Windows PowerShell, use
git commit -m 'assunto'(ou vários-mpara um corpo curto). No bash, um HEREDOC para a mensagem é aceitável. - Repita até que a árvore de trabalho esteja limpa para as alterações pretendidas.
4. Push para o GitHub (ou remoto)
Após todos os lotes:
- Se
origin(ou o remoto nomeado pelo usuário) existir e a branch deve ser publicada, executegit push -u origin HEADquando o upstream estiver ausente, caso contráriogit push. - Nunca force-push para
mainoumaster. - Se o push for rejeitado, relate o erro e sugira pull/rebase; não force a menos que o usuário solicite explicitamente.
- Se não houver remoto, informe que os commits são apenas locais e pergunte se deseja adicionar um remoto.
5. Relatório
Resuma:
- Cada hash de commit e assunto (do mais novo ao mais antigo ou em lista numerada).
- Resultado do push (URL ou branch, se disponível).
- Qualquer item deixado sem stage propositalmente (segredos, arquivos locais).
Relação com commit-msg
commit-msg sugere uma linha com base em arquivos já em stage e não faz commit. Esta skill planeja, faz stage, commita em várias etapas e faz push.