Deberías usar el índice. Después de hacer un reinicio mixto (" git reset HEAD ^"), agregue el primer conjunto de cambios en el índice, luego confírmelos. Luego comete el resto.
Puede usar " git add " para colocar todos los cambios realizados en un archivo en el índice. Si no desea organizar cada modificación realizada en un archivo, solo algunas, puede usar "git add -p".
Veamos un ejemplo. Supongamos que tengo un archivo llamado myfile, que contiene el siguiente texto:
something
something else
something again
Lo modifiqué en mi último commit para que ahora se vea así:
1
something
something else
something again
2
Ahora decido que quiero dividirlo en dos, y quiero que la inserción de la primera línea esté en la primera confirmación, y la inserción de la última línea en la segunda confirmación.
Primero vuelvo al padre de HEAD, pero quiero mantener las modificaciones en el sistema de archivos, así que uso "git reset" sin argumento (que hará un llamado reinicio "mixto"):
$ git reset HEAD^
myfile: locally modified
$ cat myfile
1
something
something else
something again
2
Ahora uso "git add -p" para agregar los cambios que quiero confirmar en el índice (= los pongo en escena). "git add -p" es una herramienta interactiva que le pregunta acerca de qué cambios al archivo debe agregar al índice.
$ git add -p myfile
diff --git a/myfile b/myfile
index 93db4cb..2f113ce 100644
--- a/myfile
+++ b/myfile
@@ -1,3 +1,5 @@
+1
something
something else
something again
+2
Stage this hunk [y,n,a,d,/,s,e,?]? s # split this section into two!
Split into 2 hunks.
@@ -1,3 +1,4 @@
+1
something
something else
something again
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? y # yes, I want to stage this
@@ -1,3 +2,4 @@
something
something else
something again
+2
Stage this hunk [y,n,a,d,/,K,g,e,?]? n # no, I don't want to stage this
Luego cometo este primer cambio:
$ git commit -m "Added first line"
[master cef3d4e] Added first line
1 files changed, 1 insertions(+), 0 deletions(-)
Ahora puedo confirmar todos los demás cambios (es decir, el número "2" puesto en la última línea):
$ git commit -am "Added last line"
[master 5e284e6] Added last line
1 files changed, 1 insertions(+), 0 deletions(-)
Revisemos el registro para ver qué confirmaciones tenemos:
$ git log -p -n2 | cat
Commit 5e284e652f5e05a47ad8883d9f59ed9817be59d8
Author: ...
Date: ...
Added last line
Diff --git a/myfile b/myfile
Index f9e1a67..2f113ce 100644
--- a/myfile
+++ b/myfile
@@ -2,3 +2,4 @@
something
something else
something again
+2
Commit cef3d4e0298dd5d279a911440bb72d39410e7898
Author: ...
Date: ...
Added first line
Diff --git a/myfile b/myfile
Index 93db4cb..f9e1a67 100644
--- a/myfile
+++ b/myfile
@@ -1,3 +1,4 @@
+1
something
something else
something again
git reset [--patch|-p] <commit>
que puede usar para evitar la molestia de tener que hacerlogit add -p
después de reiniciar. Estoy en lo cierto? Usando git 1.7.9.5.