Intentar extraer archivos de mi repositorio de Github: "negarse a fusionar historias no relacionadas"

151

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
MichaelSB
fuente
44
Cuando configuró su repositorio local, ¿clonó su repositorio de Github o simplemente lo hizo git init? En el último caso, esos repositorios no están relacionados (no tienen confirmaciones comunes) y no puede fusionarlos (pull es fetch + merge).
Paul
Hice git init. Entonces, ¿debería clonar mi repositorio de Github para solucionar esto?
MichaelSB
1
Puede clonar su repositorio de Github y continuar trabajando con él, pero seguirá siendo un repositorio separado. ¿Quieres fusionar dos historias no relacionadas juntas?
Paul
Supongo que quiero fusionar historias, pero realmente solo quiero combinar archivos tanto localmente como en github. Quiero decir que realmente no me importa el historial de los archivos antiguos que tengo en Github.
MichaelSB

Respuestas:

315

Tratar --allow-unrelated-histories

Como Max630 comentó, o como se explica aquí Git se niega a combinar historias no relacionadas

Nunca más
fuente
1
como se indica en las notas de la versión github
systemaddict
¿Por qué no hay una opción de configuración para configurar esto? Cada vez que tengo que buscar esta opción; Trabajo con git desde 2k8 y estoy totalmente molesto por esta niñera. La estúpida opción no siempre estuvo ahí. Al menos el mensaje de rechazo debe incluir la anulación de uso.
nyov
98
git checkout master
git merge origin/master --allow-unrelated-histories

Resolver conflictos, entonces

git add -A .
git commit -m "Upload"
git push
Do Nhu Vy
fuente
1
Gracias por elaborar la solución anterior.
Rahul Raj
39

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é.

BigJMoney
fuente
12

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 -fque 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.

captncraig
fuente
11

En su rama: diga maestro, extraiga y permita historias no relacionadas

git pull origin master --allow-unrelated-histories

Trabajó para mi.

Edgar256
fuente
1
Este comando es el que necesita para aceptar agregar una Licencia o Léame al crear un repositorio de origen en Github.
F1Linux
4

Ejecute el siguiente comando:

git pull origin master --allow-unrelated-histories

Se abrirá una fusión vim. Agregue un mensaje de fusión y:

  1. Presione ESC
  2. Presione Mayús + ';'
  3. Presione 'w' y luego presione 'q'.

Y eres bueno para ir.

KayV
fuente
3

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:

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.

Tasnim Fabiha
fuente
1
Versión real: git pull --rebase=merge --allow-unrelated-historiescomo --rebase=preserveestá en desuso git-scm.com/docs/git-pull#Documentation/…
Luckylooke
0

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.

fatal: refusing to merge unrelated histories on every try

Use el comando --allow-non-related-historories. Funciona perfectamente

git pull origin branchname --allow-unrelated-histories
Jitendra Rathor
fuente