git replace

Patches e reescrita

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 -l
[ ] opcional| ou<arg> valor a substituir... repetível--flag opção

Exemplos

Enxertar um histórico

git replace --graft <first-new-commit> <last-old-commit>

Ligar um histórico antigo importado.


Listar

git replace -l

Objetos substituídos.


Desfazer

git replace -d <object>

Remover uma substituição.

Exemplos de fluxos de trabalho

1
git fetch old-repo

Buscar os commits antigos

2
git replace --graft <new-root> old/main

Fazer 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

A:

Sim: git --no-replace-objects <command>.