2010-04-17 7 views
21

Acabo de crear una gran pieza de código que deseo confirmar en varias confirmaciones por separado.
Para que pueda organizar las partes relevantes, confirmar, escenificar, confirmar, ... y así sucesivamente hasta que se hayan aplicado todos mis cambios.Git: Etapa en Commit, ¿cuál es el flujo de trabajo correcto?

La parte que falta es cómo puedo probar si dividí la confirmación de forma correcta.
I.e. si la parte que está en el área de preparación al menos compila?

Para hacer eso, de alguna manera debo hacer que mi árbol de trabajo esté sincronizado con el índice (área de ensayo) sin perder los cambios que se cometerán más adelante.

¿Cuál es el derecho manera de hacerlo?
¿Cuál es la forma más rápida de para hacerlo?

Actualización:
¿Cómo hacerlo con mago?

Respuesta

16

que podría hacerlo con:

$ git branch task1 # first set of commit to do 

Una rama intermedia puede ser útil para grabar algunas confirmaciones intermedios cuando se agrega lentamente el contenido al nuevo índice.

A continuación, intente una interactive session for adding justo lo que desea:

$ git add -i 

Añadir cualquier momento que desee comprobar lo que ha añadido:

$ git stash --keep-index 

Si compila, git commit su trabajo actual, y si task1 aún no se ha completado, git stash pop para restaurar el árbol de trabajo completo y repita.

Una vez task1 es totalmente cocido, puede trim all those 'task1' commits, y combinar el todo el trabajo en master:

$ git checkout master 
$ git merge task1 
$ git branch -D task1 # no need for that intermediate branch 

Si quiere conservar la historia de algunos importantes task1 confirmaciones, se puede reajustar primera task1 en la parte superior de maestro, antes de fusionar master en task1 (avance rápido)

Por último, si su escondite aún contiene algún trabajo en progreso, repita todos los procesos para task2.

+3

git stash --keep-index es exactamente lo que necesitaba. –

+0

--keep-index es nuevo para mí también. Gracias y +1 –

+0

@VonC: Gran explicación. Esto (y 'git-rebase -i) es una de las cosas que realmente amo sobre usar Git y hago este tipo de cosas todo el tiempo. Te da la capacidad de * diseñar * tus compromisos para que tengan sentido y contengan solo cambios relevantes (relacionados). –

0

Aquí está una manera Magit que utilizo:

  • hacer que su índice para el primer comprometerse con Magit "u" o "s" para el escenario o unstage trozo/archivos/región. (Esto se puede hacer con git gui también). Una vez que su índice esté listo para confirmar:
  • confirme con "c", escriba su mensaje de confirmación, Ctrl-C Ctrl-C para confirmar.
  • esconder con "z" seguido de < < Enter >>, esto ocultará todos los cambios. Para recuperar sus cambios, puede usar "A" mientras su puntero está en la entrada correcta.

haga sus pruebas para verificar si su compromiso es bueno. Si se debe realizar algún cambio, vuelva a hacer lo mismo que antes, pero presione Ctrl-C Ctrl-A antes de comprometerse mientras está en la pantalla del mensaje de confirmación. Esto modificará (completará) su último compromiso en lugar de crear uno nuevo.

Tenga en cuenta que si luego determina que parte del código debe modificar una confirmación antes de la última vez, debe confirmar el código por sí mismo (con un resumen temporal) y doblarlo en la derecha. Gracias a "L" para acceder a la pantalla de registro, apunte el puntero antes de confirmar que desea aplastar, y presione "E" para iniciar una sesión "git rebase -i". Reordene las confirmaciones para que el resumen temporal sea para "corregir" la confirmación de destino. Salga de la memoria intermedia y TADA. Todo está hecho.

Cuestiones relacionadas