Git se niega a fusionar historias no relacionadas en rebase

2382
Shubham Chaudhary 2016-06-21 21:23.

Durante git rebase origin/developmentel 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 con este cambio de base permitiendo historias no relacionadas con la bandera forzada introducida en la nueva versión?

22 answers

2836
blue112 2016-06-21 21:26.

El comportamiento predeterminado ha cambiado desde Git 2.9:

"git merge" utilizado para permitir la fusión de dos ramas que no tienen una base común de forma predeterminada, lo que llevó a un nuevo historial de un proyecto existente creado y luego fue retirado por un mantenedor desprevenido, lo que permitió un historial paralelo innecesario combinado con el proyecto existente . Se le ha enseñado al comando que no permita esto de forma predeterminada , con una --allow-unrelated-historiesopción de trampilla de escape que se utilizará en un evento poco común que fusiona las historias de dos proyectos que comenzaron sus vidas de forma independiente.

Consulte el registro de cambios de la versión de Git para obtener más información.

Puede utilizar --allow-unrelated-historiespara forzar la fusión.

1320
adi 2016-10-19 02:13.

En mi caso, el error se produjo fatal: refusing to merge unrelated historiesen cada intento, especialmente en la primera solicitud de extracción después de agregar de forma remota un repositorio de Git.

El uso de la --allow-unrelated-historiesbandera funcionó con una solicitud de extracción de esta manera:

git pull origin branchname --allow-unrelated-histories
611
Ogbonna Vitalis 2017-11-21 06:41.

Prueba el siguiente comando:

git pull origin master --allow-unrelated-histories

Esto debería solucionar tu problema.

285
Adithya Bhat 2017-06-09 07:41.

Recibí este error cuando configuré un repositorio local primero. Luego fui a GitHub y creé un nuevo repositorio. Entonces corrí

git remote add origin <repository url>

Cuando intenté empujar o tirar, obtuve el mismo fatal: unrelated_historieserror cada vez.

Así es como lo arreglé:

git pull origin master --allow-unrelated-histories
git merge origin origin/master
... add and commit here...
git push origin master
155
VIKAS KOHLI 2018-12-07 18:29.

Para esto, ingrese el comando:

git pull origin branchname --allow-unrelated-histories

Por ejemplo,

git pull origin master --allow-unrelated-histories

Referencia:

Problema de historias no relacionadas con GitHub

141
MJ Montes 2019-04-11 18:14.
git pull origin <branch> --allow-unrelated-histories

Será dirigido a una ventana de edición de Vim:

  • Insertar mensaje de confirmación
  • Luego presione Esc(para salir del modo "Insertar"), luego :(dos puntos), luego x("x" pequeña) y finalmente presione para salir Enterde Vim
  • git push --set-upstream origin <branch>
101
Aamir Kalimi 2018-11-05 01:39.

Yo tuve el mismo problema. Prueba esto:

git pull origin master --allow-unrelated-histories 

git push origin master
48
Daniel petrov 2017-01-21 04:05.

Tratar git pull --rebase development

47
Amir Hossein Ghasemi 2020-03-01 07:25.

Para Android Studio e IntelliJ:

Primero, comete todo y resuelva cualquier conflicto.

Luego abra la terminal desde abajo de IDE e ingrese:

git pull origin master --allow-unrelated-histories

Ahora puedes empujar.

43
jyotishman saikia 2020-08-31 08:42.

Ejecuté este comando y el problema se resolvió. 1

git pull origin branchName --allow-unrelated-histories
42
Satakshi Pandey 2020-03-30 04:13.

Dos posibilidades cuando esto puede suceder:

  1. Ha clonado un proyecto y, de alguna manera, el directorio .git se eliminó o se corrompió. Esto hace que Git no conozca su historial local y, por lo tanto, generará este error cuando intente presionar o extraer del repositorio remoto.

  2. Ha creado un nuevo repositorio, le ha agregado algunas confirmaciones y ahora está intentando extraer 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 --allow-unrelated-history

Ref: https://www.educative.io/edpresso/the-fatal-refusing-to-merge-unrelated-histories-git-error

39
Aniket Patil 2019-05-10 15:57.

ADVERTENCIA ESTO POTENCIALMENTE SOBRESCRIBIRÁ EL REPOSITORIO REMOTO

Esto funcionó para mí:

git push origin master --force
35
cdauth 2018-06-22 23:04.

Dado que todas las demás respuestas no responden realmente a la pregunta, aquí hay una solución inspirada en esta respuesta en una pregunta relacionada.

Entonces obtienes tu error al hacer git rebase:

$ git rebase origin/development
fatal: refusing to merge unrelated histories
Error redoing merge 1234deadbeef1234deadbeef

Este error en realidad no cancela el rebase, pero ahora está en medio de él:

$ git status
interactive rebase in progress; onto 4321beefdead
Last command done (1 command done):
   pick 1234deadbeef1234deadbeef test merge commit

Entonces ahora puede hacer la fusión a mano. Descubra las confirmaciones principales de la confirmación de fusión original:

$ git log -1 1234deadbeef1234deadbeef
commit 1234deadbeef1234deadbeef
Merge: 111111111 222222222
Author: Hans Dampf
Date:   Wed Jun 6 18:04:35 2018 +0200

    test merge commit

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 realice la fusión a mano, copiando el mensaje de confirmación de la fusión original:

$ git merge --allow-unrelated 222222222 --no-commit
Automatic merge went well; stopped before committing as requested
$ git commit -C 1234deadbeef1234deadbeef
[detached HEAD 909af09ec] test merge commit
 Date: Wed Jun 6 18:04:35 2018 +0200
$ git rebase --continue
Successfully rebased and updated refs/heads/test-branch.
28
Lokesh Purohit 2019-02-22 21:24.

Yo tuve el mismo problema. El problema es remoto tenía algo que lo impedía.

Primero creé un repositorio local. Agregué un archivo LICENSEy README.mda mi archivo local y comprometido.

Luego quería un repositorio remoto, así que creé uno en GitHub. Aquí cometí un error al marcar "Inicializar este repositorio con un README" , lo que creó un README.md en remoto también.

Así que ahora cuando corrí

git push --set-upstream origin master

Tengo:

error: failed to push some refs to 'https://github.com/lokeshub/myTODs.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes
(e.g. hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Ahora para superar esto lo hice

git pull origin master

Lo que resultó en el siguiente error:

From https://github.com/lokeshub/myTODs
branch            master     -> FETCH_HEAD
fatal: refusing to merge unrelated histories**

Lo intenté:

git pull origin master --allow-unrelated-histories

Resultado:

From https://github.com/lokeshub/myTODs
 * branch            master     -> FETCH_HEAD
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Automatic merge failed;
fix conflicts and then commit the result.

Solución:

Eliminé el repositorio remoto y creé uno nuevo (creo que solo eliminar el archivo READMEpodría haber funcionado) y luego funcionó lo siguiente:

git remote rm origin
git remote add origin https://github.com/lokeshub/myTODOs.git
git push --set-upstream origin master
28
Santosh Kadam 2019-09-26 00:47.

Esto suele suceder cuando se compromete por primera vez en un repositorio remoto. Como el error dice claramente "negarse a fusionar historias no relacionadas", debemos usar la marca --allow-unrelated-historiales.

git pull origin master  --allow-unrelated-histories

Ahora habría algunos conflictos que tendremos que resolver manualmente. Después de eso, simplemente confirme el código y empújelo.

26
oiyio 2020-03-26 07:26.

Primero, extraiga los cambios remotos a su local usando el siguiente comando:

git pull origin branchname --allow-unrelated-histories

** branchname es maestro en mi caso.

Cuando finaliza el comando de extracción, se produce un conflicto. Deberías resolver los conflictos. Utilizo Android Studio para resolver conflictos.

Cuando se resuelven los conflictos, ¡la fusión está lista!

Ahora puedes empujar con seguridad.

12
el_tigro 2016-08-31 05:20.

También luché con esto, pero me las arreglé para encontrar una solución.

Cuando se encuentre con el error anterior, simplemente seleccione la confirmación de fusión y luego continúe la rebase:

git cherry-pick -m 1 1234deadbeef1234deadbeef
git rebase --continue
12
Ustas 2020-06-28 07:13.

Intenté git pull --allow-unrelated-historiesno funcionó, pero lo que me resuelve este problema fue:

  1. Copié todos los archivos de mi repositorio de escritorio en otra carpeta y luego eliminé la carpeta.

  2. Luego clono el repositorio nuevamente porque es un proyecto nuevo.

  3. Cuando copié mis archivos de nuevo y presioné, funcionó a la perfección.

11
striker77 2020-01-22 01:33.

Al hacer una git pull, recibí este mensaje fatal: refusing to merge unrelated histories para un módulo de repositorio en el que 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.

git reset --hard origin/master

Esto lo solucionó en mi caso.

6
theaws.blog 2020-07-31 22:56.

Para los empleados de Google:

Si creó un nuevo repositorio en GitHub y lo inicializó accidentalmente con archivos READMEo .gitignore.

Si no puede fusionar o reajustar porque la .gitcarpeta está dañada.

Entonces:

  • Crear una nueva carpeta
  • git clone
  • Pegue todos sus archivos en esta carpeta

Ahora lo local y lo remoto tendrán "historias relacionadas" y se fusionarán o volverán a fusionarse felizmente.

1
alpham8 2019-09-04 20:44.

Utilizo la rebase durante años y nunca me había encontrado con tal problema. Sin embargo, su primer problema es que intenta hacerlo directamente en la rama remota developmentdesde el repositorio remoto, llamado origin. Eso es literalmente incorrecto porque rebase es un comando peligroso, que reestructura el historial de git. Habiendo dicho eso, primero debe probar en su repositorio local y empujarlo solo, si funciona para usted como se esperaba.

Por lo tanto, mi flujo de trabajo de rebase habitual se parece a lo 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):

  1. asegúrese de tener un árbol de trabajo limpio (sin cambios sin compromiso)
  2. checkout a la rama en la que desea cambiar la base (por ejemplo, digamos que es master; como un comando de una línea):git checkout master && git pull origin master && git checkout development
  3. Haz el rebase real: git rebase master
  4. Si está hecho y todo funciona como se esperaba, empújelo hacia su control remoto. Para hacerlo, debe forzarlo, porque el host remoto ya tiene el historial en otro orden, el remoto respondería sin nada que presionar. Entonces, debemos decir "mi versión local del historial es correcta, sobrescriba todo en esa rama remota usando mi versión local del historial":git push -f origin development

Como ya mencioné, tenga en cuenta que la rebase manipula el historial de git, que suele ser algo malo. Sin embargo, es posible hacer eso 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, aplastar o seleccionar. Entonces, en otras palabras: Rebase no debería ser su herramienta de desarrollo distribuido. Funciona bien para usted si es el único que trabaja en este repositorio.

Usamos la estrategia de rama de características. En esto, usualmente uso rebase para obtener las "actualizaciones" de los otros desarrolladores, que sucedieron 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, al revisor de código le resulta más fácil ver mis cambios realizados en esta rama de funciones.

0
Wenfang 2020-11-16 20:34.

Veo que la respuesta más votada no resuelve esta pregunta, que se encuentra en el contexto del rebase.

La única forma de sincronizar las dos ramas divergentes es fusionarlas de nuevo, lo que da como resultado una confirmación de fusión adicional y dos conjuntos de confirmaciones que contienen los mismos cambios (los originales y los de su rama rebasada). No hace falta decir que esta es una situación muy confusa.

Entonces, antes de correr git rebase, pregúntese siempre: "¿Alguien más está mirando esta rama?" Si la respuesta es sí, quite las manos del teclado y comience a pensar en una forma no destructiva de hacer sus cambios (por ejemplo, el git revertcomando). De lo contrario, puede volver a escribir el historial todo lo que quiera.

Referencia: https://www.atlassian.com/git/tutorials/merging-vs-rebasing#the-golden-rule-of-rebasing

Related questions

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Actualice a un Sonicare por tan solo $ 30

Actualice a un Sonicare por tan solo $ 30

¿Quiere probar un cepillo de dientes Sonicare sin gastar mucho dinero en uno de sus modelos favoritos de gama alta? Puede comprar un kit de la Serie 2 o Serie 3 por tan solo $ 30 hoy en Amazon. Haga clic aquí para ver la lista completa de modelos elegibles y tenga en cuenta que se descontarán $ 10 adicionales en su carrito.

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Ponle una tapa. En realidad, ponle una tapa a todo. Consigue 12 tapas de cocina elásticas de silicona por $14. [Exclusivo]

Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.

Cuéntanos tus mejores trucos de Washington, DC

Cuéntanos tus mejores trucos de Washington, DC

Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está eliminando su sección de tallas grandes y mezclando tallas más grandes con todo lo demás

Un minorista está enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

Patinaje artístico de EE. UU. 'frustrado' por falta de decisión final en evento por equipos, pide una decisión justa

El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Los compradores de Amazon dicen que duermen 'como un bebé mimado' gracias a estas fundas de almohada de seda que cuestan tan solo $ 10

Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

Se busca al corredor de los Bengals Joe Mixon por orden de arresto emitida por presuntamente apuntar con un arma de fuego a una mujer

El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

Profesor de la Universidad de Purdue arrestado por presuntamente traficar metanfetamina y proponer favores sexuales a mujeres

El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Concept Drift: el mundo está cambiando demasiado rápido para la IA

Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.

India me está pateando el culo

India me está pateando el culo

Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.

ℝ

“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Language