¿Cómo puedo dividir una confirmación anterior sin empujar con Sourcetree?

Las capacidades de rebase interactivas de Sourcetree son geniales, pero a menudo me da la sensación de querer "dividir" un commit en múltiples commits más pequeños. Sé que hay una manera de hacerlo desde la command-line, pero parece que no puedo encontrar ningún lugar en la interfaz de usuario para manejar esto.

¿Hay alguna manera de hacer esto con Sourcetree? ¿O es este uno de esos lugares donde tengo que bajar a la línea de command para lograr mis objectives?

La split de las confirmaciones desde la command-line usando una rebase interactiva se explica en la git help rebase (busque "DIVISIÓN DE COMPROMISOS"). No es un command o opción de Git; es más una forma de cometer edición . Puede seguir los pasos que se describen utilizando SourceTree para Mac. De su pregunta entiendo que hizo rebases interactivas utilizando SourceTree antes y está familiarizado con su UI.


Actualizar:

Parece que mi respuesta original (ver arriba) es demasiado críptica. No existe un command especial de git para dividir confirmaciones y, en consecuencia, SourceTree no proporciona un command o una opción en la interfaz para hacer eso. Debe leer y seguir los pasos explicados en la documentation usando la GUI en lugar de la línea de command.

Estos son los pasos (citados de la documentation) y cómo seguirlos usando Atlassian SourceTree :

  1. Comience una rebase interactiva con git rebase -i <commit>^ , donde <commit> es la confirmación que desea dividir. De hecho, cualquier range de compromiso funcionará, siempre que contenga ese compromiso.

Haga clic derecho en la confirmación principal de la confirmación que desea editar. Seleccione "Volver a establecer los elementos secundarios de <hash> interactiva …" en el menu contextual que aparece ( <hash> es la abreviatura del hash de la confirmación cliqueada).

  1. Marque la confirmación que desea dividir con la acción "editar".

SourceTree abre el cuadro de dialog "Rebase interactivo". Identifique en la list el compromiso que desea dividir (es el último) y marque su checkbox en la columna "¿Enmendar compromiso?" . Presione el button " OK" para continuar.

  1. Cuando se trata de editar esa confirmación, ejecute git reset HEAD^ . El efecto es que HEAD se rebobina en uno, y el índice sigue el juego. Sin embargo, el tree de trabajo permanece igual.

SourceTree ejecuta en segundo plano los commands de Git necesarios y se detiene cuando se trata de editar la confirmación que marcó para la modificación. Haga clic con el button derecho en el padre del HEAD actual y select "Restablecer (sin bifurcación, rebasear <branch> ) a este compromiso" en el menu contextual que aparece ( <branch> es el nombre de la sucursal que había desprotegido al iniciar el process ) Preguntará qué modo usar para reiniciar; select "Mixto – siga copyndo pero reinicie el índice" en la list "Modo de uso" y presione "OK" .

  1. Ahora agregue los cambios al índice que desea tener en la primera confirmación. Puedes usar git add (posiblemente interactivamente) o git gui (o ambos) para hacer eso.

¡Es time dividido! Agregue al índice los files y los lockings que quiera poner en el primer commit; incluso puede hacer cambios que no estaban presentes en la confirmación original si es necesario. Sin embargo, tenga en count que los cambios que no estaban en la confirmación que está editando pueden entrar en conflicto con los cambios introducidos por las últimas confirmaciones.

  1. Confirme el índice actual con cualquier post de compromiso apropiado ahora.

Use SourceTree como de costumbre y comprometa los cambios por etapas.

  1. Repita los dos últimos pasos hasta que su tree de trabajo esté limpio.

(sin comentarios)

  1. Continúa la rebase con git rebase --continue .

Elija el "Continuar Rebase" del menu "Acciones" .

¡Felicitaciones! Simplemente divide un commit usando el command oculto "split commit" provisto por SourceTree : p

Observaciones

Si algo sale mal o si decide o por algún motivo necesita cancelar todo el process, utilice la opción "Abortar Rebase" del menu "Acciones" . En el background, SourceTree invocará git rebase --abort y todo volverá bien al estado en que se encontraba antes de comenzar.

Si necesita dividir / editar más de una confirmación en la misma twig, puede usar la confirmación más antigua en el paso 1 y marcar para enmendar todas las confirmaciones que necesita en el paso 2. Todo lo demás es igual, SourceTree repetirá los pasos 3 7 por cada compromiso que marcó para la enmienda.

Así es como puedes dividir una confirmación usando Atlassian SourceTree . En su lugar, se puede usar cualquier otro cliente de Git con GUI que proporcione una forma de hacer una rebase interactiva.