2008-10-24 12 views
9

Digamos que la rama B es una rama de tema fuera de la rama A, y quieres esos cambios en la rama C. ¿Qué significa cuando seleccionas la confirmación de fusión de la rama A y la rama B para ramificar? ¿DO?Cherry-pick a merge

Por ejemplo, si usa el distintivo -m para especificar el CABEZAL viejo de la rama A para seleccionar la fusión a la rama C, ¿eso significa simplemente "Tomar la diferencia entre el árbol de acotación seleccionado con precisión y el CABEZAL antiguo de la rama A y aplicarlo a la rama C? "

¿Hay algún inconveniente para utilizar este método? (Por ejemplo mirada Would rama C como que se fusionó en rama A y B sería más pueden aplicar los cambios que simplemente los commits de la rama B??)

Respuesta

10

La manera en que yo suelo hacer esto es utilizando git rebase:

git rebase --onto C A B 

Esto toma los diffs entre A y B, y aplica esos diffs a la rama C. Como bonificación, la rebase omitirá cualquier confirmación entre A y B que realice el mismo cambio textual que ya existe en la rama C.

Actualización: En el caso que mencionaste en los comentarios, recuerda que Git nunca sobrescribe la historia pasada. Entonces, incluso después de hacer la rebase anterior, podría volver a crear una nueva cabecera en la confirmación donde B solía estar antes de la rebase. Lamentablemente, no puedo pensar en una forma sencilla de hacerlo a esta hora de la mañana. Lo siento, no podría ser más ayuda, tal vez alguien más se presente de una manera fácil!

+0

Lo siento, dejé claro que quería que los cambios en la rama B se aplicaran a A y C. La rebase provocaría que los cambios en B se fusionen fácilmente con C, pero ahora A está en la situación en que C estaba pulg. ¿Algo que pueda hacer para tener esos cambios en A también? – Readonly

+0

También lamento haber escogido nombres de rama tan pobres al hacer la pregunta :( – Readonly