Durante git rebase origin/development
el siguiente mensaje de error se muestra desde Git:
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef
Mi versión de Git es 2.9.0. Solía funcionar bien en la versión anterior.
¿Cómo puedo continuar este rebase permitiendo historias no relacionadas con la bandera forzada introducida en la nueva versión?
git-rebase
situación, mientras que la respuesta da una bandera paragit-merge
git pull [repo URL]
en lugar degit clone [repo URL]
Respuestas:
El comportamiento predeterminado ha cambiado desde Git 2.9:
Consulte el registro de cambios de la versión de Git para obtener más información.
Puede usar
--allow-unrelated-histories
para forzar la fusión.fuente
--allow-unrelated-histories
permanentemente?git pull
también. Fue en ese "raro evento que fusiona historias de dos proyectos que comenzaron sus vidas de forma independiente".git --work-tree="." pull --allow-unrelated-histories
En mi caso, el error fue solo
fatal: refusing to merge unrelated histories
en cada intento, especialmente en la primera solicitud de extracción después de agregar de forma remota un repositorio Git.El uso de la
--allow-unrelated-histories
bandera funcionó con una solicitud de extracción de esta manera:fuente
git clone
.Pruebe el siguiente comando:
Esto debería solucionar tu problema.
fuente
Recibí este error cuando configuré un repositorio local primero. Luego fui a GitHub y creé un nuevo repositorio. Entonces corrí
Cuando traté de empujar o tirar, recibí el mismo
fatal: unrelated_histories
error cada vez.Así es como lo arreglé:
fuente
.git
carpeta, ejecutógit init
e hizo lo que Adithya dijo, excepto la parte de fusión.Para esto, ingrese el comando:
Por ejemplo,
Referencia:
Problema de historias no relacionadas de GitHub
fuente
Será dirigido a una ventana de edición de Vim:
git push --set-upstream origin <branch>
fuente
:x<Enter>
willYo tuve el mismo problema. Prueba esto:
fuente
Tratar
git pull --rebase development
fuente
git pull --rebase=preserve --allow-unrelated-histories development
newOrigin branch
más quedevelopment
), agregué el commit inicial a la parte superior de mi sucursal local, eliminando efectivamente casi todo. Quería que la confirmación inicial del nuevo control remoto estuviera en la parte inferior.Para Android Studio e IntelliJ:
Primero, comprometerse todo y resuelve cualquier conflicto.
Luego abra la terminal desde abajo del IDE e ingrese:
Ahora puedes empujar.
fuente
ADVERTENCIA ESTO POSIBLEMENTE SOBRESCRIBIRÁ EL REPOSITORIO REMOTO
Esto funcionó para mí:
fuente
Como todas las otras respuestas no responden realmente la pregunta, aquí hay una solución inspirada en esta respuesta en una pregunta relacionada.
Entonces obtienes tu error haciendo
git rebase
:Este error en realidad no cancela el rebase, pero ahora estás en el medio:
Entonces ahora puedes hacer la fusión a mano. Descubra los commits principales del commit de fusión original:
Averigüe cuál de los dos padres de fusión es el que se fusionó con el actual (probablemente el segundo, verifique con
git log 222222222
), y luego haga la fusión a mano, copiando el mensaje de confirmación del compromiso de fusión original:fuente
Yo tuve el mismo problema. El problema es que remoto tenía algo que lo impedía.
Primero creé un repositorio local. He añadido una
LICENSE
yREADME.md
archivo a mi local y comprometida.Entonces quería un repositorio remoto, así que creé uno en GitHub. Aquí cometí un error al marcar "Inicializar este repositorio con un archivo README" , que también creó un archivo README.md en remoto.
Entonces ahora cuando corrí
Tengo:
Ahora para superar esto hice
Lo que resultó en el siguiente error:
Lo intenté:
Resultado:
Solución:
Eliminé el repositorio remoto y creé uno nuevo (creo que solo eliminar el archivo
README
podría haber funcionado) y luego funcionó lo siguiente:fuente
git push --force ...
sería una solución adecuada en el paso 1 en este caso particularEsto suele suceder cuando se compromete por primera vez al repositorio remoto. Como el error dice claramente "negarse a fusionar historias no relacionadas", tenemos que usar el indicador --allow-non-related-historories.
Ahora habría algunos conflictos que tenemos que resolver manualmente. Después de eso solo confirme el código y empújelo.
fuente
--allow-unrelated-histories
bandera.Dos posibilidades cuando esto puede suceder:
Has clonado un proyecto y, de alguna manera, el directorio .git se eliminó o corrompió. Esto lleva a Git a no estar al tanto de su historial local y, por lo tanto, hará que arroje este error cuando intente empujar hacia o desde el repositorio remoto.
Ha creado un nuevo repositorio, le ha agregado algunas confirmaciones y ahora está intentando extraerlo de un repositorio remoto que ya tiene algunas confirmaciones propias. Git también arrojará el error en este caso, ya que no tiene idea de cómo se relacionan los dos proyectos.
SOLUCIÓN
git pull origin master --permitir historias no relacionadas
Ref - https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error
fuente
También luché con esto, pero logré encontrar una solución.
Cuando se encuentre con el error anterior, simplemente seleccione el compromiso de fusión y luego continúe con el rebase:
fuente
En primer lugar, realice los cambios remotos a su local utilizando el siguiente comando:
** branchname es master en mi caso.
Cuando finaliza el comando de extracción, se produce un conflicto. Deberías resolver los conflictos. Yo uso Android Studio para resolver conflictos.
Cuando se resuelven los conflictos, la fusión está hecha.
Ahora puedes empujar con seguridad.
fuente
Resolve Conflict
en AS. A veces, la ventana emergente / globo inferior derecha desaparece y no puedo hacer nada. Gracias @oiyioAcabo de hacer un
fuente
Al hacer una
git pull
, recibí este mensajefatal: refusing to merge unrelated histories
para un módulo de repositorio donde no había actualizado la copia local durante un tiempo.Ejecuté este comando solo para actualizar local desde el origen. Solo quería lo último del control remoto y no necesitaba ningún cambio local.
Esto lo solucionó en mi caso.
fuente
Leer con el siguiente enlace, funciona para mí (sin usar la
--allow-unrelated-histories
bandera)https://stackoverflow.com/a/39783462/4324288
fuente
Estoy usando el rebase durante años y nunca me había encontrado con ese problema. Sin embargo, su primer problema es que intenta hacerlo directamente en la rama remota
development
desde el repositorio remoto, llamadoorigin
. Eso es literalmente incorrecto porque rebase es un comando peligroso, que reestructura el historial de git. Dicho esto, primero debe probar su repositorio local y presionarlo solo, si funciona para usted como se esperaba.Por lo tanto, mi flujo de trabajo de rebase habitual es el siguiente (pero tenga en cuenta que no debe usar rebase en las ramas, que no es el único comité. Para tales ramas, use simplemente fusionar y resolver conflictos, si corresponde):
master
; como un comando de una línea):git checkout master && git pull origin master && git checkout development
git rebase master
git push -f origin development
Como ya mencioné, tenga en cuenta que rebase manipula la historia de git, eso generalmente es algo malo. Sin embargo, es posible hacerlo en las sucursales, donde nadie más se compromete. Para mantener la rama extraíble para los otros desarrolladores, use otra estrategia de fusión como fusionarse, squash o cherrypick. En otras palabras: Rebase no debería ser su herramienta en el desarrollo distribuido. Funciona bien para ti si eres el único que trabaja en este repositorio.
Utilizamos la estrategia de ramificación de características. En esto, usualmente uso rebase para obtener las "actualizaciones" de los otros desarrolladores, eso sucedió mientras tanto en la rama maestra. Al hacerlo, reduce el tamaño de las confirmaciones que son visibles en una solicitud de extracción. Por lo tanto, facilita que el revisor de código vea mis cambios realizados en esta rama de características.
fuente