Estoy tratando de usar git add --interactive
para agregar selectivamente algunos cambios a mi índice, pero continuamente recibo el mensaje "Tu trozo editado no se aplica. Edita de nuevo ...". Recibo este mensaje incluso si elijo la opción e, e inmediatamente guardo / cierro mi editor. En otras palabras, sin editar el trozo en absoluto, el parche no se aplica.
Aquí está el ejemplo exacto que estoy usando (estoy tratando de armar una pequeña demostración):
Archivo original:
first change
second change off branch
third change off branch
second change
third change
fourth change
Archivo nuevo:
Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
bug fix 1
change supporting feature 1
Estoy tratando de mostrar cómo usar git add --interactive
para agregar solo la línea "corrección de error 1" al índice. Al ejecutar el complemento interactivo en el archivo, elijo el modo de parche. Me presenta
diff --git a/newfile b/newfile
index 6d501a3..8b81ae9 100644
--- a/newfile
+++ b/newfile
@@ -1,6 +1,9 @@
+Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
+bug fix 1
+change supporting feature 1
Respondo con split, seguido de "no" para aplicar el primer trozo. El segundo trozo, trato de editar. Originalmente intenté eliminar el resultado final, eso no funcionó. Dejar al galán solo por completo tampoco funciona, y no puedo entender por qué.
fuente
-
's al principio de líneas que no existen en el archivo para empezar; es una diferencia y no puede eliminar líneas que aún no están allí. Entonces, si una línea en la diferencia comienza con+
y la cambia a-
git, ¿se vuelve WTF? porque ahora la línea marcada para ser eliminada no existe para empezar (en su lugar, esa línea fue marcada para agregar, y cuando una línea marcada para agregar está marcada para eliminación, git no puede eliminar una línea que aún no está en el archivo) .Respuestas:
Para este ejemplo en particular, necesita ajustar los números de línea en el trozo. Cambiar la línea:
para que en su lugar lea:
fuente
¿Es esto como en esta publicación de git-add ?
Vea también esta confirmación en git add -p .
La respuesta de Ortomala Lokni se refiere a la publicación del blog de Joaquín Windmüller " Seleccione de forma selectiva los cambios para confirmar con git (o Imma edita su trozo) "
En lugar de contar líneas, lo que a Git le gustaría hacer es fusionar trozos superpuestos (cuando se edita uno) antes de aplicar dicho trozo editado.
Eso se discutió a mediados de 2018 y evitaría escenarios como:
fuente
- foo
a "(solo un espacio en blanco, no" un espacio en blanco y toda la línea "). Me tomó un tiempo entender que debería haber sido "foo".Por supuesto, llegué tarde a esto, pero de todos modos quería mencionar que este tema se discutió el año pasado en la lista de correo de git y parece que no ha cambiado mucho desde entonces.
Este problema en particular se debe a dividir e intentar editar el mismo trozo. El análisis, publicado originalmente por Jeff King, del problema subyacente es esencialmente:
Jeff concluye su publicación con una solución muy pragmática que siempre tiene éxito y, por lo tanto, es muy recomendable:
Si solo elige editar un trozo que no haya sido dividido previamente, no tendrá que lidiar con los números de línea.
fuente
^M
en el archivo diff. Una vez que guardé el archivo con terminaciones CR, ¡se ejecutó el parche de edición interactivo!Cuando no desea eliminar una línea que se preparó para su eliminación, como en
donde desea mantener la segunda línea, asegúrese de reemplazarla
-
con un espacio, en lugar de eliminar toda la línea (como lo haría para deshacerse de una línea agregada). Git usará la línea para el contexto.fuente
También es importante modificar correctamente el encabezado del trozo (por ejemplo
@@ -1,6 +1,9 @@
). Joaquin Windmuller revela el secreto de la edición de encabezados en una de las publicaciones de su blog .fuente
Recientemente, al leer este hilo, descubrí cómo hacer la edición manual.
El truco que utilicé fue que si tengo una diferencia como:
El truco es eliminar por completo las dos líneas que no quiero, haciendo que la diferencia resultante se vea así:
Si bien esto probablemente sea obvio para la mayoría de las personas, no lo fue para mí hasta hoy y pensé que debería compartir mi experiencia. Por favor dígame si existe algún peligro con este método.
fuente
+
en una' '
por lo menos durante una hora.Puede editar manualmente los números de línea, lo que definitivamente es útil en algunos casos. Sin embargo, probablemente podría haber evitado este problema en particular NO dividiendo primero el trozo.
Si ve que probablemente necesitará editar algo más adelante en el trozo que Git ha elegido automáticamente, es mejor editar todo el trozo en lugar de dividir, preparar la mitad y luego editar la otra mitad. Git hará un mejor trabajo averiguando eso.
fuente
Llegué a esta pregunta buscando una solución al mismo problema y no pude averiguar cómo cambiar los números de línea (como se sugirió anteriormente) en el trozo para que git lo aceptara en mi caso. Sin
git gui
embargo, encontré una manera mucho mejor de hacerlo usando . Allí puede seleccionar las líneas en el diff que desea escenificar, luego hacer clic derecho y elegir "Stage lines from commit". Recuerdo que git-cola también tiene la misma funcionalidad.fuente
git-cola
parece funcionar en Linux, Windows y MacOS.Un problema adicional que tuve cuando recibí este error fue que los finales de línea cambiaron cuando guardé el archivo de edición.
Estaba usando Windows y usando el Bloc de notas para mis ediciones (solo guarda con finales de línea de Windows). Mi código fue escrito con Notepad ++ y lo configuré para tener terminaciones de línea estilo Unix / Linux.
Cuando cambié mi configuración para tener Notepad ++ como el editor de git predeterminado, pude hacer mis ediciones en el trozo.
fuente
git config --global core.editor '"C:/Program\ Files\ \(x86\)/Notepad++/notepad++.exe"'
(adapte esto de acuerdo a dónde está instalado notepad ++ en su PC)Una razón para los extraños mensajes "Su trozo editado no se aplica" (probablemente acompañado de algo como "error: fragmento de parche sin encabezado en la línea ...") podría ser su editor si está configurado para eliminar los espacios en blanco finales. Obviamente, esto causaría problemas importantes, ya que los parches codifican líneas vacías, ya que las líneas con un espacio, cualquier trozo que contenga líneas vacías no se aplicaría si se guardara con dicho editor. Entonces, en efecto, cualquier trozo que contenga líneas vacías sin cambios no se aplicaría después de editar con si la eliminación de los espacios en blanco finales está activada.
fuente
Para su información, estaba obteniendo un error ligeramente interrelacionado ... cuando agregué un parche siguiendo las instrucciones sugeridas anteriormente ... Sin embargo, no mostraba ningún error. Lo recibía repetidamente pidiéndome que escenificara el mismo trozo ... Me di cuenta de que estaba ejecutando una versión anterior de Vim 7.4 ... Actualicé vim y ahora funciona como se esperaba. Espero que esto ayude a alguien..
fuente