anúncios

quinta-feira, 27 de agosto de 2026

Meu histórico do git parece um desastre, como eu conserto?

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