¿Por qué aparece el error 'fatal: refusing to merge unrelated histories'?
El error fatal: refusing to merge unrelated histories ocurre principalmente en versiones de Git superiores a la 2.9.0. Este fallo se desencadena cuando intentas realizar un comando git pull o git merge entre dos proyectos que no comparten una raíz o un historial de commits en común.
Es muy habitual encontrarse con este problema al crear un repositorio local nuevo, iniciar de forma independiente un repositorio remoto en plataformas como GitHub o GitLab (por ejemplo, al marcar la opción de añadir un archivo README o .gitignore) e intentar unir ambos proyectos por primera vez.
Causas principales del problema
- Creación independiente del repositorio local y del repositorio remoto con commits iniciales diferentes.
- Clonación incorrecta o combinación de ramas pertenecientes a proyectos totalmente distintos.
- Restauración de repositorios corruptos desde una copia de seguridad sin vincular el historial previo.
Método 1: Usar la bandera --allow-unrelated-histories (Recomendado)
La solución más sencilla e inmediata consiste en forzar a Git a combinar los dos historiales no relacionados utilizando una bandera específica en tu comando de integración.
- Abre la terminal o consola de comandos en el directorio de tu proyecto local.
- Ejecuta el siguiente comando especificando tu rama principal (por ejemplo, main o master):
git pull origin main --allow-unrelated-histories - Si existen conflictos de archivos entre ambos repositorios, abre tu editor de código para resolver los marcadores de conflicto.
- Guarda los cambios, añade los archivos modificados con
git add .y realiza el commit:git commit -m "Fix: Fusión de historiales no relacionados" - Por último, envía los cambios al repositorio remoto mediante:
git push origin main
Método 2: Aplicar Rebase en lugar de Merge
Si prefieres mantener un historial lineal y limpio en tu control de versiones, puedes optar por reestructurar los commits de tu rama local sobre la rama remota mediante un rebase.
- Asegúrate de descargar las últimas referencias remotas ejecutando:
git fetch origin - Aplica el rebase indicando la bandera para permitir historias no relacionadas:
git rebase origin/main --allow-unrelated-histories - En caso de surgir conflictos durante el proceso, edita los archivos afectados, agrégalos con
git add .y continúa el rebase con el comando:git rebase --continue - Una vez finalizado con éxito, sube la rama actualizada a tu servidor remoto con
git push origin main.