git replace
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 -lEjemplos
Injertar un historial
git replace --graft <first-new-commit> <last-old-commit>Conectar un historial antiguo importado.
Listar
git replace -lObjetos reemplazados.
Deshacer
git replace -d <object>Quitar un reemplazo.
Ejemplos de flujos de trabajo
git fetch old-repoTraer los commits antiguos
git replace --graft <new-root> old/mainHacer 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
Sí: git --no-replace-objects <command>.