O Problema
Você abriu o git log e encontrou algo assim:
fix stuff
wip
tentativa 2
eslint de novo
bug fix
como assim nao funciona
REVERT
feat: adds feature X (nao funciona ainda)
me ajuda por favor
fix: arruma o fix anterior
Seu histórico está bagunçado, commits inúteis poluem o repositório, e o pior: alguém pode ver isso no pull request.
A Causa
Falta de disciplina com mensagens de commit, commits demais para Changes pequenos, e uso incorreto do git add . commitando tudo junto.
A Solução
1. Reescreva os últimos N commits com rebase interativo
git rebase -i HEAD~5
Isso abre um editor com os últimos 5 commits. Você pode:
pick abc1234 feat: adiciona login
squash def5678 fix: ajusta layout
squash ghi9012 wip: tentativa 2
pick jkl3456 feat: adiciona logout
squash combina o commit no anterior. fixup faz o mesmo mas descarta a mensagem.
2. Corrija a última mensagem de commit
git commit --amend -m "feat: adiciona autenticação com JWT"
3. Desfaça o último commit mantendo as mudanças
git reset --soft HEAD~1
As mudanças ficam staged para você reorganizar com git add seletivo.
4. Desfaça completamente o último commit
git reset --hard HEAD~1
Cuidado: isso apaga as mudanças permanentemente.
5. Limpe dados sensíveis já commitados
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch .env' \
--prune-empty --tag-name-filter cat -- --all
Depois force o push:
git push origin --force --all
6. Organize com staging seletivo
git add -p
Isso abre um modo interativo onde você escolhe pedaços específicos do arquivo para commitar.
Antes vs Depois
| Antes | Depois |
|---|---|
| fix stuff | feat: adiciona autenticação JWT |
| wip | feat: adiciona tela de login |
| tentativa 2 | fix: ajusta validação do formulário |
| como assim nao funciona | test: adiciona testes unitários |
| REVERT | chore: atualiza dependências |
Regra de Ouro
Uma mensagem de commit deve explicar o quê mudou e por quê. Se você não consegue explicar em uma linha, talvez deveria ser dois commits.
Nunca force push em branches compartilhadas sem avisar o time.
Feito!
Nenhum comentário:
Postar um comentário