2010-09-12 16 views

Respuesta

10

Puede seguir exactamente el mismo proceso en la pregunta que ha vinculado, pero después de verificar la confirmación raíz puede usar git commit --amend para modificar la confirmación original y luego git commit para realizar una confirmación adicional antes de continuar con la rebase el comando.

Dependiendo de la forma en que desea dividir el commit puede utilizar git rm --cached para eliminar archivos que desea añadir en la segunda cometer antes de la primera git commit --amend y editar los archivos que desea tener un aspecto diferente antes de llamar git add en esos archivos, nuevamente antes de llamar al git commit --amend.

Después de llamar git commit --amend, para asegurarse de que usted se compromete con exactitud el estado de la raíz original de comprometerse puede llamar:

git checkout <sha1-of-original-root> -- . 

antes de llamar git commit para hacer el segundo cometen de la raíz dividida comprometerse.

+1

(reescrito) Usted no quiere 'git reset --hard' aquí. Puede usar 'git reset - .', pero eso no" restaurará "el árbol de trabajo, solo el índice. Probablemente la mejor idea es 'git checkout - .' que actualizará el índice y el árbol de trabajo pero no HEAD (dejándote listo para comprometer la segunda parte de la confirmación de división (raíz original)) . La idea principal aquí es que tanto * reset * como * checkout * cambiarán HEAD excepto cuando les proporcione un argumento de ruta. –

+0

@Chris Johnsen: Tiene toda la razón. Estaba pensando en un reinicio en dos etapas, luego en el camino '--hard' pero en realidad no escribí eso. La solución de pago es mejor. –

2

Usted puede utilizar la opción --root para contar rebase que desea volver a escribir la raíz/primera comprometerse:

$ git rebase --interactive --root 

A continuación, la raíz cometen se mostrará en la lista de rebase TODO, y se puede seleccionar para editar que:

edit <root commit sha> <original message> 
pick <other commit sha> <message> 
... 

Ésta es la explicación de --root de the Git rebase docs:

Rebase todos los commits accesibles desde <branch>, en lugar de limitarlos con <upstream>. Esto le permite volver a establecer la base de la (s) confirmación (es) raíz (es) en una rama.

Cuestiones relacionadas