2011-10-12 21 views
9

Tengo una rama maestra y "PersonalSite" para una base de código en la que estoy trabajando. He estado intentando fusionar repetidamente el maestro en la rama PersonalSite en vano.git merge no se combina

Esta vez, pensé que tenía todo lo enderezó, así que lo hice:

git checkout master 
git pull 
git checkout PersonalSite 
git pull 
git merge master 

parecía que todo estaba funcionando, y aparece el conjunto de archivos que hubiera esperado, pero no había un conflicto . El conflicto fue correcto y fue como se esperaba, así que lo arreglé, hice "git add", "git commit", luego "git push". Pero ahora, cuando miro mi registro de git, solo muestra una confirmación sin cambios de código, pero con un solo conflicto.

Ahora, cuando ejecuto "git merge master" desde la rama "PersonalSite", dice "Ya está actualizado". pero claramente este no es el caso, ya que ninguno de los cambios que intenté fusionar realmente se fusionó. ¿Qué es exactamente lo que debo hacer para que Master se fusione realmente en este punto?

Respuesta

5

Al solucionar el conflicto y confirmar el conflicto de fusión, ya completó la fusión. Git agrega commits de fusión cuando es necesario, es normal pero no registran nada excepto que se realizó la fusión y qué archivos se fusionaron si hubo un conflicto. Si miras más de cerca tu registro verás que de hecho hay confirmaciones del maestro.

EDITAR: De acuerdo, intente esto una prueba. No tiene que usar el comando de fusión, puede simplemente pasar el maestro a PersonalSite.

git checkout PersonalSite 
git pull origin master 

Vea lo que le ofrece. Si dice actualizado, entonces se ha fusionado correctamente.

Si fusiona cosas localmente como lo hizo, entonces necesita asegurarse de que las sucursales locales de seguimiento estén actualizadas. Siempre especificar el nombre de la sucursal para tirar de,

git pull origin master 
git pull origin PersonalSite 
+1

la razón que digo que no se fusionan es que hay cambios en la rama principal que no se reflejan en la rama PersonalSite incluso después de fusionar ... – LAW

+0

respuesta actualizada. – sciritai

+1

git pull origen [nombre de la rama] hizo el truco – Bijan

0

una fusión no mostrará ningún cambio, excepto sus resoluciones de conflicto.

para ver las diferencias en ambos lados de la fusión hacer:

git diff head^.. 

y

git diff head^2.. 

para el otro lado.

Espero que esto ayude.

3

Suponiendo que realmente han fusionado lo que quería fusionar (que es posible, pero difícil de decir, dada su explicación), todavía no verá diferenciaciones en la salida de git log, solo los mensajes de confirmación. Incluso si usa -p para indicar git log para mostrar diffs, la diferencia para la confirmación de combinación generalmente estará vacía o posiblemente muestre resoluciones de conflicto. Esto se debe a que, semánticamente, solo las resoluciones de conflictos son parte del compromiso de fusión; los otros cambios son parte de otros commits.

Si desea git log que le muestre el efecto completo de fusión se compromete todos modos, puede utilizar:

git log -p -m -c 

La función de las opciones:

  • -p lo dirige a mostrar diferenciaciones, no solo cometer mensajes;
  • -m le dice que muestre diffs para las asignaciones de fusión también; y
  • -c le dice que se combinan las diferenciaciones en dos en uno para fusión comete

La vista diff en gitk va a hacer lo mismo.

4

Me doy cuenta de que esta es una pregunta más antigua ahora, pero estaba teniendo lo que creo que es el mismo problema. No pude lograr que se resolvió con cualquier combinación de los comandos en otras respuestas, pero yo resolverlo mediante la ejecución de la rama que quiero funde en:

git checkout <desired_branch_name> -- . 

Así que para usted:

git checkout master -- . 

encontré esta respuesta aquí: git: checkout files from another branch into current branch (don't switch HEAD to the other branch)