Git merge informa “Ya actualizado”, aunque hay una diferencia

8 minutos de lectura

Git merge informa Ya actualizado aunque hay una diferencia
charles oscuro

Tengo un repositorio de git con 2 ramas: maestro y prueba.

Existen diferencias entre las ramas maestra y de prueba.

Ambas ramas tienen todos los cambios confirmados.

Si lo hago:

git checkout master
git diff test

Aparece una pantalla llena de cambios que muestra las diferencias. Quiero fusionar los cambios en la rama de prueba y también lo hago:

git merge test

Pero recibe el mensaje “Ya actualizado”

Sin embargo, examinar los archivos de cada rama diferente muestra claramente las diferencias.

¿Cuál es el problema aquí y cómo lo resuelvo?

  • ¿Tiene código modificado no comprometido?

    – ozma

    30 de enero de 2017 a las 5:57

  • ¿Responde esto a tu pregunta? ¿Por qué Git dice que mi rama maestra “ya está actualizada” aunque no lo esté?

    – Michael Freidgeim

    15 de abril de 2020 a las 12:19

1646753232 585 Git merge informa Ya actualizado aunque hay una diferencia
bomba

El mensaje “Ya actualizado” significa que todos los cambios de la rama que intenta fusionar ya se han fusionado con la rama en la que se encuentra actualmente. Más específicamente, significa que la rama que intenta fusionar es un padre de su rama actual. Felicitaciones, esa es la combinación más fácil que jamás haya hecho. 🙂

Utilizar gitk para echar un vistazo a su repositorio. La etiqueta de la rama de “prueba” debe estar en algún lugar debajo de la etiqueta de la rama “maestra”.

Su sucursal está actualizada con respecto a su matriz. De acuerdo con la fusión, no hay nuevos cambios en el padre desde la última fusión. Eso no significa que las ramas sean las mismas, porque puede tener muchos cambios en su rama de trabajo y parece que los tiene.

Edición 10/12/2019:

Según Charles Drake en el comentario de esta respuesta, una solución para remediar el problema es:

git checkout master
git reset --hard test

Esto lo lleva de vuelta al nivel de ‘prueba’.

Entonces hazlo:

git push --force origin master

para forzar los cambios de vuelta al repositorio central.

  • ¡Santa mierda! ¡Estás bien! Creo que lo que sucedió fue que otra rama (desarrollo inestable) se fusionó incorrectamente con el maestro y la rama de prueba era un subconjunto de inestable. La fusión que estaba tratando de hacer era devolver al maestro al nivel de ‘prueba’.

    -Charles Darke

    11 de marzo de 2009 a las 14:29

  • Derecha. Esa operación no tendría ningún sentido por lo que Git se niega a hacer nada. 🙂

    – bomba

    11 de marzo de 2009 a las 14:50

  • Lo que he hecho ahora es: git checkout master; git reset –prueba dura; Esto lo lleva de vuelta al nivel de ‘prueba’. Luego hice un “git push –force origin master” para forzar los cambios al repositorio central.

    -Charles Darke

    11 de marzo de 2009 a las 14:52

  • Hubiera sido bueno si git tuviera una advertencia para decir “intentando fusionarse con el padre”.

    -Charles Darke

    11 de marzo de 2009 a las 14:54

  • Empujar una rama que no es descendiente de la rama que ya existe en el lado remoto se considera algo malo: consulte las discusiones en las páginas man para git-push y git-pull.

    – bomba

    11 de marzo de 2009 a las 15:35

1646753233 929 Git merge informa Ya actualizado aunque hay una diferencia
ACarter

Esto me sucede a menudo cuando sé que hay cambios en el maestro remoto, así que trato de fusionarlos usando git merge master. Sin embargo, esto no se fusiona con el maestro remoto, sino con su maestro local.

Entonces, antes de hacer la fusión, verifica el maestro y luego git pull allí. Luego podrá fusionar los nuevos cambios en su rama.

  • ¿Hay alguna manera de evitar el cambio de ramas, algo así como tirar de la rama que se fusionará mientras aún está en la rama que se fusionará y luego fusionarse?

    – Japheth Ongeri – inkalimeva

    18/10/2016 a las 13:59

  • Ah, bueno. Yo pensé git fetch actualizaría la rama maestra incluso si actualmente estoy en una diferente. Resulta que no. ¡Gracias! Estoy bastante seguro de que hay una opción para fetch que le permite especificar qué rama obtener.

    – Raik

    30 de julio de 2017 a las 15:53


  • @Raik Puedes hacerlo git fetch --allpero esto solo trae las ramas, no las tira.

    – Ingo Burk

    2 de noviembre de 2017 a las 11:16

  • @JaphethOngeri-inkalimeva Puedes simplemente hacer git fetch --all && git merge origin/master. No es necesario actualizar su local master para fusionar cambios remotos.

    – Ingo Burk

    2 de noviembre de 2017 a las 11:17

  • @IngoBürk Tenía 2 sucursales, actualicé 1 con git merge master y 1 con git merge origin/master. yo tambien habia revisado master y git pull antes de actualizar 2 sucursales. a pesar de que compartían el mismo contenido, la creación de un PR entre las 2 sucursales mostró algunos archivos diff. lo arreglé por git pull la rama objetivo en la rama característica, que mostró: Already up to date! Merge made by the 'recursive' strategy. esto resultó en una confirmación de fusión sin cambios, pero eliminó los archivos diferenciales inesperados de PR. ¿Alguna idea de por qué hay una diferencia entre fusionar sucursales locales y remotas “equivalentes”?

    – aplicaciones de envoltura

    20 mayo 2019 a las 17:50

Di que tienes una sucursal master con el siguiente historial de confirmación:

A -- B -- C -- D

Ahora, crea una prueba de rama, trabaja en ella y realiza 4 confirmaciones:


                 E -- F -- G -- H
                /
A -- B -- C -- D

masterLa cabeza de apunta a D, y testLa cabeza de apunta a H.

El mensaje “Ya actualizado” aparece cuando el HEAD de la rama en la que se está fusionando es un padre de la cadena de confirmaciones de la rama que desea fusionar. Ese es el caso, aquí: D es padre de E.

No hay nada de lo que fusionarse test para masterya que nada ha cambiado en master desde entonces. Lo que quieres hacer aquí es literalmente decirle a Git que tenga masterpara apuntar a H, por lo que la rama del maestro tiene el siguiente historial de confirmaciones:

A -- B -- C -- D -- E -- F -- G -- H

Este es un trabajo para el comando Git reset. También desea que el directorio de trabajo refleje este cambio, por lo que hará una duro Reiniciar:

git reset --hard H

  • Me han dicho en el pasado que usar git reset --hard es algo bastante drástico, ¿puede perder compromisos? ¿Existe una forma más segura de realizar estos cambios, o existen los peligros de git reset --hard exagerado?

    –Graham R. Armstrong

    08/04/2015 a las 13:13

  • Este comando es sensato, no te preocupes. Diría que lo único a lo que hay que prestar atención con el --hard opción es el hecho de que en realidad modifica su directorio de trabajo y, como consecuencia, pierde los cambios no confirmados. Personalmente, hago un git status antes y después de cada comando git ejecutado manualmente para asegurarme de que mi repositorio esté limpio o en el estado esperado.

    –Marek Stanley

    08/04/2015 a las 15:27

  • esto producirá el mensaje de estado “Su rama y ‘origen/maestro’ han divergido”, ¿cómo puedo resolverlo?

    – Eido95

    24 de marzo de 2017 a las 10:47

  • ¿Hay alguna necesidad de la --hard ¿opción? He estado en esta situación un par de veces y siempre reinicio sin --hard. Funcionó bien sin el riesgo de perder los cambios no confirmados.

    – Casimiro

    19 de enero de 2020 a las 20:48

1646753234 429 Git merge informa Ya actualizado aunque hay una diferencia
Stefan Pintilie

Esto es lo que funciona para mí. digamos que tienes branch1 y quieres fusionarlo en branch2.

Abre la línea de comando de git, ve a la carpeta raíz de branch2 y escribe:

git checkout branch1
git pull branch1
git checkout branch2
git merge branch1
git push

Si tienes conflictos, resuélvelos antes git push.

git merge origin/master en lugar de git merge master trabajó para mi. Entonces, para fusionar el maestro en la rama de funciones, puede usar:

git checkout feature_branch
git merge origin/master

  • No es necesario guardar ningún cambio pendiente. Increíble.

    – Aarón C.

    7 ago 2020 a las 20:45

  • no lo entiendo pero a mi me funciono

    – escrito

    21 de febrero a las 14:40

Git merge informa Ya actualizado aunque hay una diferencia
Juan Murphy

Asegúrese de verificar primero la rama que desea fusionar y luego extraerla (para que su versión local coincida con la versión remota).

Luego, regrese a su sucursal en la que desea realizar la combinación y su combinación de git debería funcionar.

  • No es necesario guardar ningún cambio pendiente. Increíble.

    – Aarón C.

    7 ago 2020 a las 20:45

  • no lo entiendo pero a mi me funciono

    – escrito

    21 de febrero a las 14:40

1646753235 677 Git merge informa Ya actualizado aunque hay una diferencia
VonC

Siempre hay una combinación entre el HEAD actual y una o más confirmaciones (por lo general, encabezado de rama o etiqueta),
y el archivo de índice debe coincidir con el árbol de confirmación HEAD (es decir, el contenido de la última confirmación) cuando comienza.
En otras palabras, git diff --cached HEAD no debe reportar cambios.

La confirmación fusionada ya está contenida en HEAD. Este es el caso más simple, llamado “Ya actualizado”.

Eso debería significar que las confirmaciones en la prueba ya están fusionadas en el maestro, pero dado que otras confirmaciones se realizan en el maestro, git diff test todavía daría algunas diferencias.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad