Hay una pregunta sobre SO sobre la división de trozos usando magit, y las dos soluciones dadas son organizar la región (marcar una región, golpear la etapa) o reducir / hacer crecer todos los trozos usando +
& -
. Eso no es lo que busco.
En el búfer de estado de magit, quiero dividir un trozo en dos trozos, en el punto, o al menos en las líneas alrededor del punto.
Girando esto (disculpe mi mal formato de diferencia)
@@ blah blah blah
- foo
+ bar
+ baz
+
Dentro
@@ blah blah
- foo
+ bar
@ blah blah
+ baz
Cuando el punto está en la barra.
Motivaciones:
baz
siendo una declaración de depuración, por lo que me gustaría eliminarla de la confirmación defoo
&bar
sin deshacerme de ella.bar
ybaz
estar solo parcialmente relacionado, lo que significa que sus cambios no deberían estar en la misma confirmación.bar
es grande ybaz
pequeño, lo que hace que sea mucho más fácil dividir el trozo que seleccionarbar
Similar al último punto, digamos que una confirmación de 20 líneas contiene una sola línea en el medio que no debe ser puesta en escena. Sería más fácil dividir y colocar los dos trozos superiores e inferiores ignorando el del medio que usar la región.
Lo anterior puede surgir a veces cuando la presentación de diferencias separará el antes y el después de algo que ha sido modificado, y tendrá algo inútil en el medio. p.ej
@@ line
- old_foo
+ random stuff
+ new foo
diff-split-hunk
que hace exactamente eso. IOW su solicitud es una forma de usardiff-split-hunk
(o algo equivalente) desde el búfer de estado magit.Respuestas:
Como se menciona en los comentarios anteriores, Magit no admite dividir un trozo en múltiples trozos más allá de lo que es posible mediante el uso
git diff -U<n>
. Esto se debe a que Magit se basa en ese comando Git para crear las diferencias. Eso no va a cambiar, Magit siempre usará las diferencias que obtiene de Git tal como está.(En realidad, Magit elimina algunos encabezados que no son realmente relevantes para los humanos, pero los restaura al aplicar los cambios. Pero dividir un trozo más allá de lo que
-U<n>
apoya es una historia completamente diferente, conduciría a un agujero de conejo: hay una razón por la cual Git no permite "trozos más pequeños", no podría aplicarlos).Si bien Magit no admite la visualización de trozos más pequeños como se solicitó aquí, sí admite la aplicación de solo partes de un trozo. Cuando la región está activa durante la preparación, solo se aplica esa parte del trozo.
Eso no ayuda mucho cuando la parte que no debe ser puesta en escena está justo en el medio del texto que debe ser puesta en escena. Como otros han sugerido, lo que debe hacer en este caso es poner en escena todo el trozo y luego quitar el escenario de la línea que no desea comprometer en un segundo paso.
Eso, por supuesto, podría ser automatizado. La única forma en que puedo ver en qué se podría automatizar esto es "organizar el trozo actual, excepto en la región. Pero tengo algunas dudas sobre con qué frecuencia eso sería realmente útil y temo que no sería fácil implementarlo de manera robusta Por lo tanto, actualmente no tengo la intención de implementar esto.
fuente
Puedes dividir trozos con Magit.
En lugar de dejar el cursor dentro del trozo, seleccione las líneas que desea poner en escena desde el trozo y presione s . Solo la parte seleccionada del trozo se organizará, mientras que el resto del trozo todavía se encuentra en el área no preparada.
De esa manera lo dividiste en dos. Creo que puedes usar el mismo mecanismo para mover partes de trozos al escondite. Al usar k simplemente purgarás parte del trozo.
fuente
Si desea descartar partes de un trozo, seleccione las líneas dentro del trozo que desea descartar y presione x .
fuente