2011-06-17 10 views
5

Supongamos que hay dos ramas, master y slave, y editan el mismo archivo y la misma línea. Inicialmente, el contenido del archivo es¿Cómo volver a formatear el parche después de la fusión en Git?

foo bar 

continuación, en la rama slave se edita para convertirse en

foo bar baz 

Ahora el usuario de la rama slave formatea el parche (git format-patch master) y lo envía al usuario de la rama master. En el mismo tiempo, en la rama master el mismo archivo se edita y se convierte en

foo bar spam eggs 

El parche no se puede aplicar, y pide masterslave para combinar y hacer un nuevo parche. Cuando master se fusiona en slave y se resuelve el conflicto, es hora de volver a formatear el parche. El gráfico cometer ve así:

slave:    master: 

foo bar baz spam eggs 
    |    \ 
    |    \ 
    |    foo bar spam eggs 
    |     | 
foo bar baz    | 
     \     | 
     \    | 
     +--------- foo bar 

El último commit (fusionar) en slave parece:

@@@ -1,1 -1,1 +1,1 @@@ 
- foo bar baz 
-foo bar spam eggs 
++foo bar baz spam eggs 

Sin embargo, si ahora corremos git format-patch master, todavía nos llegan exactamente el mismo parche como antes, que no tiene en cuenta la fusión y resolución de conflictos:

@@ -1 +1 @@ 
-foo bar 
+foo bar baz 

¿Cómo se formatea un parche que se aplicaría contra el último máster? Me gustaría hacerlo sin rebase.

Actualización: git format rev1..rev2, donde rev1 y rev2 son cabezas de los master y custom ramas, respectivamente, no incluye los cambios relacionados con la resolución de conflictos. git-diff formatea un parche válido, pero omite los mensajes de confirmación.

Respuesta

1

¿Por qué usa parches? Deberías empujar y tirar entre repositorios.

Una fusión no es algo de lo que pueda hacer un parche. Seguirá al primer padre solamente. Puedes obtener lo que quieras usando git diff y formateando para el parche mientras especificas los 2 commits diferentes para diferenciar entre.

Espero que esto ayude.

+0

Uso parches, porque esto es lo que quiere el canal ascendente, y no tengo el control del flujo de trabajo. Tengo que formatear parches que tengan en cuenta la resolución de conflictos, porque también publico mi repositorio y no puedo volver a establecer la base. 'git diff', lamentablemente, no incluye mensajes de confirmación. – sastanin

+0

Hay una manera de hacer una combinación tener solo uno de los padres. Un parche de eso te dará el resultado que necesitas. –

+0

¿Se fusiona con solo uno de los padres? ¿Como es posible? ¿No se supone que 'git-merge'" une _dos o más historias de desarrollo juntas? – sastanin

Cuestiones relacionadas