¿Hay una inversa a la fusión del pulpo de Git?

Git tiene una capacidad de fusión de pulpo muy publicitada (?) Que puede unir muchas cabezas en una sola.

¿Pero hay algo que haría exactamente lo contrario, hacer varias twigs simultáneas de un nodo?

Supongamos que tengo un montón de código para un proyecto, y acabo de empezar a usar Git. Algunas de las características están completas en ese proyecto, otras todavía están en process de elaboración. Lo que me gustaría es que esas características inacabadas se muevan a su propia twig respectiva y separada , y tener el master tan "completo" como sea posible, sin código inacabado.

Ahora, por supuesto, podría hacer todo esto en pasos únicos: crear una twig "sin terminar function # 1" y eliminar los files del máster que son específicos de esa function. Luego volvía a ramificar el maestro en "function no finalizada n. ° 2" y volvía a eliminar los files específicos de la function n. ° 2 del maestro, pero también de la primera twig. Y así la carga de trabajo aumenta para cada split que hago.

¿Hay algo que me pueda ayudar en tal escenario?

Solutions Collecting From Web of "¿Hay una inversa a la fusión del pulpo de Git?"

Nota al margen : la fusión del pulpo y los escenarios del punto de ramificación del pulpo son muy diferentes. Recuerde que los pointers en DAG (gráfico acíclico dirigido) de los puntos de compromiso desde el niño (compromiso más reciente) hasta el padre o los padres. Entonces, en el caso de la fusión de pulpo, has commit (commit object) que tiene más de dos padres; en el caso del "punto de ramificación del pulpo", simplemente tiene algunas confirmaciones apuntando al mismo compromiso que su padre.

fusión del pulpo:

1 <---- M 2 <----/ | 3 <------| 

punto de ramificación del pulpo:

 P <----- 1 ^-------- 2 ^-------- 3 

Entonces creo que nombrar esta pregunta es simplemente incorrecto


La respuesta

Ahora, si lo que quiere hacer es dividir las modificaciones en su área de trabajo entre diferentes twigs, para poner cada característica en una twig de tema separada, puede hacer uso del área de sorting explícita (también conocido como índice) en Git.

Supongamos que modificó dos files, 'a' y 'b', y desea modificar el file 'a' para ir a la twig 'A' y la modificación en el file 'b' para ir a la twig 'B'. Supongamos que la twig en la que se encuentra actualmente, el punto de bifurcación que desea que sea la base de muchas twigs que desea crear, se denomina 'maestro'.

Primero, permite crear la twig 'A'

 $ git checkout -b A master 

Git responde con:

 M a M b Switched to a new branch "A" 

La "M" significa que los files 'a' y 'b' se modifican con respecto al punto en el que se basa la twig 'A' en (la twig 'principal'). (A continuación, simplemente pondré la respuesta de git debajo de la invocación de la línea de command, en lugar de anotar por separado qué es una respuesta).

Agreguemos el contenido del file 'a' al área de ensayo (índice).

 $ git add a 

Tenga en count que si desea agregar solo un subset de cambios en el file 'a' a la twig 'A', puede usar "git add –interactive" (abreviado como "-i") o "git gui" para hacer hunk además de cambios en el área de preparación y otras manipulaciones similares.

Ahora confirmamos los cambios en la twig 'A'

 $ git commit Created commit 35d0061: Commit description... 1 files changed, 1 insertions(+), 0 deletions(-) 

Tenga en count que no usamos la opción '-a' para git-commit!

Por cierto, si quieres probar los cambios antes de enviar desde el área de preparación, puedes usar "git stash save –keep-index" para llevar el área de trabajo al estado que vas a usar usando "git commit", probar cambios, luego vuelve al estado anterior usando "git stash pop –index" (o "git stash pop"; no recuerdo cuál necesitas aquí).

Ahora creamos la otra twig, la twig 'B', basada en la twig 'master'

 $ git checkout -b B master M b Switched to a new branch "B" 

Puede ver fácilmente que los cambios que le quedan para la twig 'B' (los cambios que no se comprometió con la twig 'A') van a la nueva twig creada 'B'. No es necesario eliminar files ni eliminar cambios. No es necesario saber qué hay en otras twigs. Todo es automático
Una vez más, agregue el contenido del file 'b' al área de ensayo (índice) y confirme en la twig 'B':

 $ git add B $ git commit 

Puede repetir esto tantas veces como sea necesario, y no se vuelve más difícil con la nueva twig.

HTH

Como acabas de empezar a usar Git, sería más fácil comenzar de nuevo y solo comprometer tu código "completo" con la twig principal. A continuación, ingrese una nueva twig del maestro para una function y asigne ese código de function 'inacabado' en su propia sucursal. Repita para cada twig de características.

En cualquier caso, debe dividir el código en características y 'completar', así que úselo para configurar su repository.