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ó ser exitoso:
[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
git init
? En el último caso, esos repositorios no están relacionados (no tienen confirmaciones comunes) y no puede fusionarlos (pull es fetch + merge).Respuestas:
Tratar
--allow-unrelated-histories
Como Max630 comentó, o como se explica aquí Git se niega a combinar historias no relacionadas
fuente
Resolver conflictos, entonces
fuente
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 una inserción 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é.
fuente
Si no hay un historial sustancial en un extremo (es decir, si es solo una confirmación de archivo Léame en el extremo de Github), a menudo me resulta más fácil copiar manualmente el archivo Léame a mi repositorio local y hacer
git push -f
que mi versión sea la nueva confirmación de raíz .Creo que es un poco menos complicado, no requiere recordar una bandera oscura y mantiene el historial un poco más limpio.
fuente
En su rama: diga maestro, extraiga y permita historias no relacionadas
Trabajó para mi.
fuente
Ejecute el siguiente comando:
Se abrirá una fusión vim. Agregue un mensaje de fusión y:
Y eres bueno para ir.
fuente
Cuando lo 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 rebase:Después de esto, confirme los cambios no confirmados con un mensaje de confirmación. Finalmente, ejecute el siguiente comando:
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.
fuente
git pull --rebase=merge --allow-unrelated-histories
como--rebase=preserve
está en desuso git-scm.com/docs/git-pull#Documentation/…En mi caso, estaba enfrentando el mismo problema, especialmente la primera solicitud de extracción que intentaba después de agregar de forma remota un repositorio de Git. Se estaba enfrentando el siguiente error.
Use el comando --allow-non-related-historories. Funciona perfectamente
fuente