example - Intentar extraer archivos de mi repositorio de Github: "negarse a fusionar historias no relacionadas"
git pull origin master (7)
Cuando usé
--allow-unrelated-histories
, este comando generó demasiados conflictos.
Hubo conflictos en los archivos en los que ni siquiera trabajé.
Para superar el error
" Refusing to merge unrelated histories"
, utilicé el siguiente comando de rebase:
git pull --rebase=preserve --allow-unrelated-histories
Después de esto, confirme los cambios no confirmados con un mensaje de confirmación. Finalmente, ejecute el siguiente comando:
git rebase --continue
Después de esto, mi copia de trabajo estaba actualizada con la copia remota y pude impulsar mis cambios como antes. No más errores de historias no relacionadas al tirar.
Estoy aprendiendo git y sigo el libro de la comunidad Git.
Anteriormente (hace mucho tiempo) hice un repositorio público en Github, con algunos archivos. Ahora configuré un repositorio local de Git en mi computadora actual y comprometí algunos archivos. Luego agregué un control remoto apuntando a mi página de Github:
[root@osboxes c]# git remote add learnc https://github.com/michaelklachko/Learning-C
Eso pareció tener éxito:
[root@osboxes c]# git remote show learnc
* remote learnc
Fetch URL: https://github.com/michaelklachko/Learning-C
Push URL: https://github.com/michaelklachko/Learning-C
HEAD branch: master
Remote branch:
master tracked
Local ref configured for ''git push'':
master pushes to master (local out of date)
Ahora quiero descargar los archivos de mi repositorio de Github a mi computadora. Hice esto:
[root@osboxes c]# git fetch learnc
[root@osboxes c]# git merge learnc/master
warning: refname ''learnc/master'' is ambiguous.
Already up-to-date.
Sin embargo, no veo ningún archivo nuevo en mi directorio local. ¿Cómo puedo conseguirlos?
También intenté hacer esto:
[root@osboxes c]# git pull learnc master
From https://github.com/michaelklachko/Learning-C
* branch master -> FETCH_HEAD
fatal: refusing to merge unrelated histories
Por cierto, localmente estoy en la rama maestra (no hay otras ramas):
[root@osboxes c]# git status
On branch master
nothing to commit, working directory clean
Ejecute el siguiente comando:
git pull origin master --allow-unrelated-histories
Se abrirá una fusión vim. Agregue un mensaje de fusión y:
- Presione ESC
- Presione Mayús + '';''
- Presione ''w'' y luego presione ''q''.
Y eres bueno para ir.
En su rama: diga maestro, extraiga y permita historias no relacionadas
git pull origin master --allow-unrelated-histories
Trabajó para mi.
Intenta
--allow-unrelated-histories
Como Max630 comentó, o como se explica aquí Git se niega a fusionar historias no relacionadas
Si bien estoy a favor de desbloquear los problemas de trabajo de las personas, no creo que "push --force" o "--allow_unrelated_histories" deba enseñarse a los nuevos usuarios como soluciones generales porque pueden causar estragos reales en un repositorio cuando uno los usa sin entender por qué las cosas no funcionan en primer lugar.
Cuando tiene una situación como esta en la que comenzó con un repositorio local y desea hacer un control remoto en GitHub para compartir su trabajo, hay algo que debe tener en cuenta.
Cuando crea el nuevo repositorio en línea, hay una opción "Inicializar este repositorio con un archivo README". Si lee la letra pequeña, dice "Omita este paso si está importando un repositorio existente".
Es posible que haya marcado esa casilla. O de manera similar, realizó un agregado / confirmación en línea antes de intentar un empuje inicial. Lo que sucede es que creas un historial de confirmación único en cada lugar y no se pueden reconciliar sin la asignación especial mencionada en la respuesta de Nevermore (porque git no quiere que operes de esa manera). Puede seguir algunos de los consejos mencionados aquí, o más, simplemente no marque esa opción la próxima vez que quiera vincular algunos archivos locales a un nuevo control remoto; manteniendo el control remoto limpio para ese empuje inicial.
Referencia: mi primera experiencia con git + hub fue encontrar este mismo problema y aprender mucho para entender lo que había sucedido y por qué.
Si no hay un historial sustancial en un extremo (es decir, si es solo una confirmación de readme en el github), a menudo me resulta más fácil copiar manualmente el readme a mi repositorio local y hacer un
git push -f
para hacer mi versión El nuevo root commit.
Creo que es un poco menos complicado, no requiere recordar una bandera oscura y mantiene el historial un poco más limpio.
git checkout master
git merge origin/master --allow-unrelated-histories
Resolver conflictos, entonces
git add -A .
git commit -m "Upload"
git push