git replace

Parches y reescritura

Reemplaza un objeto por otro sin reescribir el historial


El comando 'git replace' le dice a Git que use un objeto en lugar de otro allí donde aparezca — por ejemplo para injertar un historial antiguo en uno nuevo, o para ocultar un commit roto — sin reescribir ningún commit. Los reemplazos se guardan como refs en refs/replace/ y pueden compartirse o quitarse. La mayoría de comandos los siguen; git log marca los commits reemplazados.

Sinopsis

git replace [-f] <object> <replacement>
git replace --graft <commit> [<parent>...]
git replace -d <object>...
git replace -l
[ ] opcional| o<arg> valor a sustituir... repetible--flag opción

Ejemplos

Injertar un historial

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

Conectar un historial antiguo importado.


Listar

git replace -l

Objetos reemplazados.


Deshacer

git replace -d <object>

Quitar un reemplazo.

Ejemplos de flujos de trabajo

1
git fetch old-repo

Traer los commits antiguos

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

Hacer que la nueva raíz continúe el historial antiguo

Solución de problemas

El reemplazo no es visible para otros

Causa: refs/replace no se sube por defecto

git push origin "refs/replace/*"

Consejos y trampas

Buenas prácticas

  • ✓Usa --graft para unir historiales; evita los reemplazos para arreglos cotidianos.

Errores comunes

  • ✗Olvidar que los reemplazos son locales salvo que subas refs/replace/*.

Preguntas frecuentes

A:

Sí: git --no-replace-objects <command>.