2012-04-04 28 views
8

Hoy me enfrenté a un problema. Mi compañero de equipo creó una sucursal de la maestra. Desarrolló una característica en esta rama y luego desarrolló dos subfunciones en las ramas de la subfeature. Finalmente hizo dos refactorizaciones de todo el asunto. Así que ...Git rama rebase con hijos fusionados

 C--D E--F    | subfeatures 
    / \/ \ 
    B------M1------M2--G--H | feature 
/
A-------------------K  | master 

Normalmente nos rebase ramas función antes de combinación sin avance rápido en maestro. Pero, por supuesto, esta rebase falla. rama de la característica porcentualizada quedó mirando como:

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

de punteros del curso de C & D se convirtió en mal, así que también consigue dos ramas subfunción crecimiento 'del aire'. Entiendo cómo solucionarlo si subfeature branches no se fusionó en feature, pero en este momento estaba confundido. Escogí todo en la rama de recuperación re-estructurada y me fusioné nuevamente. ¿Hay aquí una manera más fácil de hacerlo?

Respuesta

11

Tenga en cuenta que necesita un git1.7.6 + para git rebase --preserve-merges para que funcione correctamente.

Resumen breve: Acaba de completar una combinación y alguien ha enviado una confirmación antes de que pudiera publicar la suya. La solución es hacer que Git esté al tanto de la fusión que hiciste.

git rebase --preserve-merges <upstream> 

o

git rebase -p <upstream> 

Pero hay un problema, si la combinación de conflictos que tuvo que resolvió que no serán recogidos por la maquinaria de rebase.
Y el resultado final será la resolución de los conflictos de nuevo ... al menos este es el caso con la versión git 1.7.5.4

(Ello exigiría git rerere)

2

¿Has recogido a mano cada compromiso uno a uno a mano?

Simplemente ejecute git rebase -i master feature y reescriba el historial como lo desee.