Sucursal de Git Rebase con niños fusionados

Hoy me enfrenté con un problema. Mi compañero de equipo creó una sucursal de la maestra. Desarrolló una característica en esta twig y luego desarrolló dos subfunciones en las twigs de la subfeature. Finalmente hizo dos refactorizaciones de todo el asunto. Asi que…

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

Por lo general, rebase las twigs de características antes de avanzar sin avanzar rápido hacia el maestro. Pero, por supuesto, esta rebase falla. La twig de características reajustada se vió como:

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

Por supuesto, los indicadores de C y D se equivocaron, por lo que también obtuve dos twigs de subpoblación que crecen "desde el air". Entiendo cómo solucionarlo si subfeature branches no se fusionó en feature, pero en este momento estaba confundido. Escogí todo en la twig de recuperación re-estructurada y me fusioné nuevamente. ¿Hay aquí una manera más fácil de hacerlo?

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

  • un rebase --preserve-merges --onto no funcionó antes (" git rebase --preserve-merges --onto no preserva las fusiones ")
  • un rebase --preserve-merges tenía problema en alguna instancia:
    • ver este hilo , cuando se reproducen ambos lados de la fusión)
    • " Git: Compendios de fusión de reference " (publicación de Alexandru Pasca)

Para resumir: acabas de completar una combinación y alguien ha enviado un commit antes de que pudieras empujar el tuyo. 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 su fusión tuvo conflictos que usted resolvió, no serán recogidos por la maquinaria de rebase.
Y terminarás resolviendo los conflictos otra vez … al less este es el caso con la versión de Git 1.7.5.4

(Eso requeriría git rerere )

¿Sacaste cada compromiso uno por uno a mano?

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