2011-02-09 18 views
38

Si he realizado varios conjuntos de cambios en un archivo grande, ¿es posible dividirlos en commit separados usando git?¿Rompe varios cambios en commits separados con git?

+0

duplicado posible de [¿Cómo dividir una confirmación en confirmaciones más pequeños con Git ?] (http://stackoverflow.com/questions/2118042/how-to-split-a-commit-int-smaller-commits-with-git). –

+2

Además, no está claro si los cambios ya se han confirmado o no. Si ya se han confirmado en varios commits, 'rebase --interactive' es el camino a seguir. Si no, 'git add --patch' es una de las opciones que debes considerar. –

Respuesta

64

Quiere git add --patch, que le permitirá seleccionar qué cambios de escenario.

+4

¿Por qué el voto a favor? git add -i es overkill si lo único que quieres es seleccionar hunks, ya que la primera opción que elijas del menú -i es 'p' (o 5), así que bien podrías haber saltado directamente hacia ella con - parche. –

+8

¿De verdad, otro voto negativo sin explicación? Si cree que hay algún problema con 'git add --patch', tenga la cortesía de dar una explicación de por qué. –

+1

Creo que los votos a favor (¡no los míos!) Son de gente que ya se ha comprometido, donde esta respuesta no funcionará. La pregunta no dice si los cambios están comprometidos o no. – mikemaccana

16

Sí, puede usar git add -i para seleccionar qué etapas desea configurar para cada confirmación. Puede obtener documentación ejecutando git help add y desplazándose a "Modo interactivo".

1

Williams answer es perfectamente válido. Pero a veces es más fácil hacer las cosas a mano. Por ejemplo, si accidentalmente actualizó una biblioteca de terceros con muchos archivos antes de confirmar los cambios que realizó anteriormente. Con git add -p (igual que --patch) necesitaría recorrer todos estos archivos. Así que en este caso es mucho más conveniente que acaba de organizar el archivo que desea comprometerse y hacer una segunda comprometerse con todos los otros cambios:

> git add /path/to/your/file.txt 
> git commit -m "my commit message" 
[master a0c5ea6] my commit message 
1 file changed, 2 insertions(+), 1 deletion(-) 
> git add --all 
> git commit -m "updated library xyz" 
+5

En realidad,' git add -p' le permite seleccionar el archivo particular en la línea de comando, y dentro de la sesión interactiva puede saltar a un trozo particular usando 'g', o busca un trozo que coincida con una expresión regular usando'/'. El punto de 'add -p' es seleccionar hunks de un archivo, pero esta solución propuesta requiere agregar el archivo completo, que no es lo que el OP quiere. –