files example commits branches git github git-diff

example - git merge



No hay nada que comparar. Nada para comparar, las ramas son historias de compromiso totalmente diferentes. (8)

Tengo un tema de CMS instalado en mi máquina. Estoy rastreando los cambios a través de git y decidí hacer una copia de seguridad en GitHub para poder compartir esos cambios.

El tema que se proporciona también está disponible en GitHub. En mi máquina he añadido esto como un control remoto en sentido ascendente. Ahora puedo ver fácilmente los cambios entre mi maestro y el remoto hacia arriba con el siguiente comando:

git diff --color master upstream/number

Si pudiera agregar el control remoto en GitHub, podría compartir fácilmente estos cambios. ¿Es posible establecer esta relación en GitHub?

He probado lo siguiente:

git push -u origin upstreambranch

lo que añade una upstreambranch al maestro en GitHub. Sin embargo, intentar comparar ambas ramas no funciona, el resultado que obtengo en GitHub es que: "No hay nada que comparar"

¿Hay una forma alternativa de comparar estos?


La respuesta corta

Parece que GitHub no te permite comparar las sucursales porque en realidad no comparten nada del mismo historial, aunque pueden compartir muchos de los mismos archivos y códigos.

Aquí hay una captura de pantalla de la bifurcación temporal que hice de tu repo, donde traté de comparar el master con la upstreambranch , como lo describiste. Observe el mensaje de error:

Dice:

No hay nada que comparar.

master y upstreambranch son historias de compromiso completamente diferentes.

La respuesta larga

Probablemente descargaste la fuente original y la agregaste a un repositorio completamente nuevo en lugar de clonar el repositorio original, ¿verdad? Hacer eso hará que el historial de su repositorio sea completamente diferente del historial del repositorio original, ya que su nuevo repositorio no tendrá ninguna de las mismas confirmaciones con las mismas ID de sha.

Puede ver que al hacer un registro inverso de su rama master y la rama upstreambranch :

# Your first commit, see commit sha git log --reverse master commit c548d7b1b16b0350d7fbdb3ff1cfedcb38051397 # <== HERE Author: Padraic Stack <[email protected]> Date: Wed Apr 2 15:11:28 2014 +0100 First commit of everything # First commit sha of the original repo git log --reverse upstreambranch commit 105a12817234033c45b4dc7522ff3103f473a862 # <== THERE Author: Jeremy Boggs <[email protected]> Date: Mon Feb 22 16:00:53 2010 +0000 Creates repo directories for the Seasons theme.

Soluciones

Si rehace sus confirmaciones sobre el historial original, debería poder comparar las sucursales. Hay varias formas diferentes de rehacer tus compromisos, incluyendo

git rebase --onto

y

git cherry-pick

También puede rehacer cada confirmación manualmente, si es necesario.


Encontré que ninguna de las respuestas proporcionadas realmente funcionó para mí; Lo que realmente me funcionó es hacer:

git push --set-upstream origin *BRANCHNAME*

Después de crear una nueva rama, entonces se realiza un seguimiento adecuado. (Tengo Git 2.7.4)


Esto ocurrió conmigo ayer porque descargué el código del repositorio original e intenté insertarlo en mi repositorio bifurcado, pasé mucho tiempo buscando la solución "No se puede enviar el error" y lo presioné con fuerza.

Solución:

Simplemente refuerce el repositorio eliminando el anterior y clone el repositorio del repositorio bifurcado a la nueva carpeta.

Reemplace el archivo con el antiguo en una nueva carpeta y empújelo para volver a compilar y realice una nueva solicitud de extracción.


Esto parece un comportamiento indeseable por parte de github, pero es bastante fácil de solucionar. Lo que quiere hacer es volver a clasificar su sucursal en un compromiso razonable ( cualquier razonable) en el historial existente. Lo que puedes hacer es buscar el repositorio de github y descubrir qué árbol en su historial es más similar al con el que comenzaste. Comience de esta manera:

git remote add github u://r/l git fetch github myroot=`git rev-list master --max-parents=0` root_tree=`git rev-parse $myroot^{tree}` github_base=`git log --pretty=%H/ %T github/master | sed -n "s/$root_tree//p"`

Con un poco de suerte, eso le dará un compromiso en el historial de github que tiene el árbol exacto con el que comenzó. Suponiendo que sí,

git rebase --onto $github_base $myroot master

y tu estas listo.

Si eso no encuentra un árbol que coincida, puedes encontrar una aproximación más cercana. Aquí hay una manera de obtener una estimación aproximada de las diferencias:

git log --pretty=''echo %H $(git diff-tree -p -b -U0 ''$myroot:'' %T|wc -l)'' github/master / | sh

que contará las líneas en una diferencia minimizada entre el árbol de cada confirmación en la historia de github/master y su árbol raíz. Parece razonable esperar una pequeña diferencia agradable, podrías ver la diferencia real antes de llamar a la github_base cometer y hacer la rebase anterior.


Recibí este mensaje de error, porque estaba migrando una aplicación de SVN a GitHub y no es suficiente invocar un git init en la ubicación del código fuente extraído de SVN, pero necesita invocar un clon de git svn para tener Todo el historial de cometidos. De esta manera, los dos códigos fuente en GitHub tendrán un historial mutuo y pude abrir solicitudes de extracción.


Si sabe a partir del cual comenzó el problema de confirmación, puede restablecer su rama a esa confirmación y luego fusionarla.


Tuve un problema en el que estaba presionando mi repositorio remoto desde un repositorio local que no coincidía con el historial del remoto. Esto es lo que funcionó para mí.

Cloné mi repo localmente, así que sabía que estaba trabajando con una copia nueva de repo:

git clone Your_REPO_URL_HERE.git

Cambie a la rama que está intentando ingresar al control remoto:

git checkout Your_BRANCH_NAME_HERE

Agregue el control remoto del original:

git remote add upstream Your_REMOTE_REPO_URL_HERE.git

Haz un git fetch y git pull:

git fetch --all git pull upstream Your_BRANCH_NAME_HERE

Si tiene conflictos de fusión, resuélvalos con

git mergetool kdiff3

u otra herramienta de fusión de su elección.

Una vez que los conflictos se resuelven y se guardan. Cometer y empujar cambios.

Ahora vaya al repositorio gitub.com del original e intente crear una solicitud de extracción. Debe tener la opción de crear una solicitud de extracción y no ver el mensaje "No hay nada para comparar, las sucursales son historias de compromiso completamente diferentes". Nota: Es posible que deba elegir comparar entre las bifurcaciones para su solicitud de extracción.


No creo que tengamos el mismo caso aquí , pero todavía alguien más puede encontrarlo útil .

Cuando se me ocurrió un error similar, iba a ser la primera fusión y la primera confirmación. No había nada en el repositorio en línea. Por lo tanto, no había ningún código en git-hub para comparar.

Simplemente eliminé el repositorio vacío y creé uno nuevo con el mismo nombre. Y entonces no hubo error.