¿Qué es el error fatal: refusing to merge unrelated histories en Git?
El error 'fatal: refusing to merge unrelated histories' es una medida de seguridad implementada en Git a partir de la versión 2.9.0. Su propósito es evitar que fusiones por accidente dos proyectos completamente diferentes que no comparten un historial de confirmaciones (commits) común. Esto es muy habitual al intentar conectar un repositorio local nuevo con un repositorio remoto en GitHub o GitLab que ya contiene archivos iniciales como un README o un .gitignore.
Causas principales de este fallo en Git
- Repositorios independientes: Creaste un repositorio local mediante el comando
git inity, en paralelo, creaste uno remoto en GitHub con una plantilla inicial, sin clonarlo previamente. - Ramas sin ancestros comunes: Intentas realizar un pull o merge entre dos ramas que se desarrollaron de forma aislada desde su origen, impidiendo que Git encuentre un punto de partida compartido.
Método 1: Forzar la fusión con --allow-unrelated-histories
La solución más rápida y directa consiste en indicarle explícitamente a Git que permita la fusión de ambos historiales utilizando una bandera especial en tu terminal.
- Abre la consola o terminal en la ruta de tu proyecto local.
- Ejecuta el siguiente comando reemplazando 'main' por el nombre de tu rama principal si es necesario:
git pull origin main --allow-unrelated-histories- Si se abre el editor de texto en consola (como Vim o Nano), guarda el mensaje de fusión predeterminado para continuar.
- Resuelve los conflictos de código si aparecen, realiza el commit correspondiente y sube los cambios usando
git push origin main.
Método 2: Solucionar el conflicto mediante un Rebase
Si prefieres mantener un historial de confirmaciones lineal y limpio sin crear un commit de fusión (merge commit) adicional, puedes optar por aplicar un rebase.
- Asegúrate de estar situado en tu rama de trabajo local.
- Ejecuta el comando de rebase apuntando al origen remoto:
git pull --rebase origin main- En caso de que surjan conflictos, edita los archivos afectados para elegir los cambios correctos.
- Añade los archivos corregidos con
git add .y continúa el proceso con el comandogit rebase --continue.
Método 3: Reconstrucción manual para evitar pérdida de datos
Si prefieres una alternativa visualmente más controlada y segura para no arriesgar tu código actual, puedes reconstruir el repositorio siguiendo estos pasos:
- Copia todos tus archivos de desarrollo actuales a una carpeta temporal fuera del repositorio Git.
- Elimina la carpeta oculta
.gitde tu directorio actual para reiniciar la configuración de Git. - Clona el repositorio de GitHub directamente en tu carpeta de trabajo usando
git clone. - Pega tus archivos de desarrollo dentro de la carpeta clonada reemplazando los existentes si aplica.
- Sube los cambios de forma habitual ejecutando
git add ., luegogit commit -m "Subida de archivos limpia"y finalmentegit push.