git replace
Substitui um objeto por outro, sem reescrever o histórico
O comando 'git replace' diz ao Git para usar um objeto no lugar de outro onde quer que apareça — por exemplo para enxertar um histórico antigo num novo, ou esconder um commit quebrado — sem reescrever nenhum commit. As substituições ficam como refs em refs/replace/ e podem ser compartilhadas ou removidas. A maioria dos comandos as segue; o git log marca os commits substituídos.
Sinopse
git replace [-f] <object> <replacement>
git replace --graft <commit> [<parent>...]
git replace -d <object>...
git replace -lExemplos
Enxertar um histórico
git replace --graft <first-new-commit> <last-old-commit>Ligar um histórico antigo importado.
Listar
git replace -lObjetos substituídos.
Desfazer
git replace -d <object>Remover uma substituição.
Exemplos de fluxos de trabalho
git fetch old-repoBuscar os commits antigos
git replace --graft <new-root> old/mainFazer a nova raiz continuar o histórico antigo
Solução de problemas
A substituição não aparece para os outros
Causa: refs/replace não é enviado por padrão
git push origin "refs/replace/*"
Dicas e armadilhas
Boas práticas
- ✓Use --graft para juntar históricos; evite substituições para correções do dia a dia.
Erros comuns
- ✗Esquecer que as substituições são locais, a menos que você envie refs/replace/*.
Perguntas frequentes
Sim: git --no-replace-objects <command>.