theirs origin force git merge

origin - git merge--abort



Git merge informa "Ya está actualizado", aunque hay una diferencia (14)

Una fusión siempre está entre la HEAD actual y una o más confirmaciones (generalmente, 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 debe reportar cambios.

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

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

Tengo un repositorio git con 2 ramas: master y test.

Hay diferencias entre el maestro y las ramas de prueba.

Ambas ramas tienen todos los cambios comprometidos.

Si lo hago:

git checkout master
git diff test

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

git merge test

Pero recibe el mensaje "Ya actualizado"

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

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


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

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


Digamos que tienes un master sucursal con el siguiente historial de confirmación:

A -- B -- C -- D

Ahora, creas una prueba de bifurcación, trabajas en ella y haces 4 confirmaciones:

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

la cabeza del master apunta a D, y la cabeza de la test apunta a H

El mensaje "Ya está 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 un padre de E

No hay nada que fusionar de test a master , ya que nada ha cambiado en el master desde entonces. Lo que quieres hacer aquí es, literalmente, decirle a Git que tenga la cabeza del master para que apunte 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 reset comando Git. También desea que el directorio de trabajo refleje este cambio, por lo que hará un restablecimiento completo:

git reset --hard H


El mensaje "Ya está actualizado" significa que todos los cambios de la rama que está intentando fusionar ya se han fusionado con la rama en la que se encuentra actualmente. Más específicamente, significa que la rama que está intentando fusionar es un padre de su rama actual . Felicitaciones, esa es la combinación más fácil que jamás harás. :)

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

Tu sucursal está actualizada respecto a su matriz. Según la combinación, no hay nuevos cambios en el elemento principal desde la última combinación. Eso no significa que las ramas sean las mismas, porque puede tener muchos cambios en su rama de trabajo y parece que sí.


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

Así que antes de hacer la fusión, compruebe al maestro, y luego git pull allí. Entonces podrá fusionar los nuevos cambios en su sucursal.


Esto me sucedió porque, extrañamente, GIT pensó que la sucursal local era diferente de la sucursal remota. Esto era visible en el gráfico de la rama: mostraba dos ramas diferentes: remotes / origin / branch_name y branch_name.

La solución fue simplemente eliminar el repositorio local y volver a clonarlo desde el control remoto. De esta manera, GIT entendería que los controles remotos / origin / branch_name> y branch_name son los mismos, y podría emitir el git merge branch_name .

rm <my_repo> git clone <my_repo> cd <my_repo> git checkout <branch_name> git pull git checkout master git merge <branch_name>


Esto sucede porque su copia local de la sucursal que desea fusionar está desactualizada. Tengo mi sucursal, llamada MyBranch y quiero fusionarla con ProjectMaster .

_>git status On branch MyBranch-Issue2 Your branch is up-to-date with ''origin/MyBranch-Issue2''. nothing to commit, working tree clean _>git merge ProjectMaster Already up-to-date.

¡Pero que hay cambios que deben fusionarse!

Esta es la cuestión: cuando git merge ProjectMaster , git mira mi copia local de esta rama, que podría no estar actualizada . Para ver si este es el caso, primero le digo a Git que revise y vea si mis sucursales están desactualizadas y recupero cualquier cambio si lo está utilizando, uh, fetch . Luego salto a la rama que quiero fusionar para ver qué está pasando allí ...

_>git fetch origin _>git checkout ProjectMaster Switched to branch ProjectMaster **Your branch is behind ''origin/ProjectMaster'' by 85 commits, and can be fast-forwarded.** (use "git pull" to update your local branch)

Ah-ha! Mi copia local está obsoleta por 85 confirmaciones, ¡eso lo explica todo! Ahora, Baje los cambios que me faltan, luego salto a MyBranch y MyBranch intentar la combinación.

_>git pull Updating 669f825..5b49912 Fast-forward _>git checkout MyBranch-Issue2 Switched to branch MyBranch-Issue2 Your branch is up-to-date with ''origin/MyBranch-Issue2''. _>git merge ProjectMaster Auto-merging Runbooks/File1.ps1 CONFLICT (content): Merge conflict in Runbooks/Runbooks/File1.ps1 Automatic merge failed; fix conflicts and then commit the result.

Y ahora tengo otro problema que arreglar ...


Lo que funciona para mí, digamos que tienes Branch1 y quieres fusionarlo en Branch2.

Abre la línea de comandos de git, vaya a la carpeta raíz de branch2 y escriba:

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

Si tiene problemas, no necesita hacer git push, sino que primero resuelva los conflictos y luego presione.


Me ha pasado lo mismo. Pero el escenario era un poco diferente, tenía una rama maestra y saqué el release_1 (por ejemplo). Hice algunos cambios en la rama release_1 y los fusionó en el origen. luego hice ssh y en el servidor remoto volví a sacar el release_1 usando el comando git checkout -b release_1 - ¡lo que realmente genera un nuevo release de sucursal_! desde el maestro en lugar de revisar la versión existente ya existente release_1 desde el origen. Resolvió el problema eliminando el interruptor "-b"


Se enfrentó a este escenario utilizando Git Bash.

Nuestro repositorio tiene varias sucursales y cada una tiene un ciclo de confirmación diferente y la fusión se realiza de vez en cuando. Old_Branch se usó como padre para New_Branch

Old_Branch se actualizó con algunos cambios que debían combinarse con New_Branch

Estaba utilizando el siguiente comando de extracción sin ninguna rama para obtener todas las fuentes de todas las ramas.

origen git pull

Extrañamente esto no extrae todos los compromisos de todas las ramas. Lo había pensado así, ya que el indicado muestra casi todas las ramas y etiquetas.

Así que para solucionar este problema había revisado Old_Branch sacó lo último usando

git checkout Old_Branch

origen git pull Old_Branch

Ahora echa un vistazo a New_Branch

git checkout New_Branch

Lo tiré para estar seguro

origen git pull New_Branch

git merge Old_Branch

Y la viola tiene conflictos que arreglar de Old_Branch a New_Branch :) que se esperaba


Si la fusión de la rama A en la rama B informa "Ya está actualizada", la reversa no siempre es cierta. Solo es cierto si la rama B es descendiente de la rama A, de lo contrario, la rama B simplemente puede tener cambios que no están en A.

Ejemplo:

  1. Creas ramas A y B fuera de maestro
  2. Realiza algunos cambios en el maestro y combina estos cambios solo en la rama B (sin actualizar u olvidando actualizar la rama A).
  3. Realiza algunos cambios en la rama A y fusiona A a B.

En este punto, la fusión de los informes A a B "Ya está actualizado", pero las sucursales son diferentes porque la sucursal B tiene actualizaciones del maestro, mientras que la sucursal A no.


Sucedió a mí y me enviaron a esta página, no estoy seguro si tuve el mismo escenario, pero el mío era yo tratando de "volver a fusionar" esa rama de "prueba".

Así que anteriormente lo fusioné pero excluyo intencionalmente algunos cambios específicos durante esa fusión, por lo que claramente tiene cierta diferencia entre las ramas. Entonces intenté volver a combinarlo porque me di cuenta / olvidé que debería haberlo hecho y quería agregar un archivo / cambio en particular que previamente había excluido y esperaba que si hiciera una combinación nuevamente mostraría todos los cambios que excluí antes , pero me equivoqué y recibí el mensaje "Ya actualizado".

Al leer el comentario / respuesta de @Bombe, él tiene razón, y creo que Git se comporta de esa manera, así que lo que hice fue hacer una copia de seguridad de los archivos en la rama de prueba, luego revisar la rama maestra y pegar manualmente los archivos en ella y cometer Es como si se tratara de nuevos cambios.

No estoy seguro de si esta es la forma correcta o podría ayudar a otros a tener este mismo problema, pero proporcionó una solución para mi caso particular.


Yo tuve el mismo problema. Tuve cambios en el control remoto y todavía mostraba "Ya actualizado". Reclonear el repositorio me solucionó el problema.


git merge origin/master lugar de eso, git merge master trabajó para mí. Así que para combinar el maestro en la rama de la característica puede usar:

git checkout feature_branch git merge origin/master