warning unrelated tag relacionadas rehusando refusing histories historias fusionar fatal failed crear common commits git rebase

unrelated - git push tag



Git se niega a fusionar historias no relacionadas en rebase (13)

Durante el git rebase origin/development Git muestra el siguiente mensaje de error:

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?


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 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ás en el medio:

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

Entonces ahora puedes hacer la fusión a mano. Descubra los commits principales del commit 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 del compromiso de 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.


El comportamiento predeterminado ha cambiado desde Git 2.9:

"git merge" solía permitir la fusión de dos ramas que no tienen una base común por defecto, lo que condujo a un nuevo historial de un proyecto existente creado y luego fue arrastrado por un incauto mantenedor, lo que permitió una historia paralela innecesaria fusionada en el proyecto existente . Se le ha enseñado al comando a no permitir esto de forma predeterminada , con una --allow-unrelated-histories escotilla de escape: --allow-unrelated-histories que se utilizará en un evento raro que fusiona 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 usar --allow-unrelated-histories para forzar la fusión.


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

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

git pull origin branchname --allow-unrelated-histories


Esto funcionó para mí:

git push --set-upstream origin master


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 el development de la sucursal remota desde el repositorio remoto, llamado origin . Eso es literalmente incorrecto, porque rebase es un comando peligroso, que reestructura la historia git. Dicho esto, primero debe probar en 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):

  1. asegúrese de tener un árbol de trabajo limpio (sin cambios no confirmados)
  2. checkout a la rama en la que desea volver a basar (por ejemplo, digamos que es master ; como un comando de una línea): git checkout master && git pull origin master && git checkout development
  3. Hacer la rebase aguda: git rebase master
  4. Si está hecho y todo funciona como se esperaba, llévelo a su control remoto. Para hacerlo, debe forzarlo, ya que el host remoto ya tiene el historial en otro orden, el remoto respondería sin nada que presionar. Entonces, necesitamos decir "mi versión local del historial es correcta, sobrescribir todo en esa rama remota usando mi versión local del historial": 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 rama característica. 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.



Prueba git pull --rebase development


Pruebe el siguiente comando:

git pull origin master --allow-unrelated-histories

Esto debería solucionar tu problema.


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 traté de empujar / tirar, obtuve el mismo error fatal: unrelated_histories .

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


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:

git cherry-pick -m 1 1234deadbeef1234deadbeef git rebase --continue


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

Primero creé un repositorio local. README.md archivo LICENSE y README.md a mi local y comprometido.

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í

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.

Tengo:

git pull origin master

Ahora para superar esto hice

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

Lo que resultó en el siguiente error:

git pull origin master --allow-unrelated-histories

Lo intenté:

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.

Resultado:

git remote rm origin git remote add origin https://github.com/lokeshub/myTODOs.git git push --set-upstream origin master

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:

git push origin master --force


Yo tuve el mismo problema. Prueba esto:

git pull origin master --allow-unrelated-histories git push origin master


git pull origin <branch> --allow-unrelated-histories

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

  • Insertar mensaje de confirmación
  • Luego presione Ctrl + X para salir de Vim
  • git push --set-upstream origin <branch>