freddiefujiwara
Cuando realizo cambios en un archivo en Git, ¿cómo puedo confirmar solo algunos de los cambios?
Por ejemplo, ¿cómo podría confirmar solo 15 líneas de las 30 que se han modificado en un archivo?
Puedes usar:
git add --patch <filename>
o para abreviar:
git add -p <filename>
Git dividirá su archivo en lo que considere “trozos” sensatos (porciones del archivo). A continuación, le hará esta pregunta:
Stage this hunk [y,n,q,a,d,/,j,J,g,s,e,?]?
Aquí hay una descripción de cada opción:
- y prepara este trozo para el próximo compromiso
- norte no pongas en escena este trozo para el próximo compromiso
- q abandonar; no pongas en escena este trozo ni ninguno de los trozos restantes
- a presente este pedazo y todos los pedazos posteriores en el archivo
- d no ponga en escena este fragmento ni ninguno de los fragmentos posteriores del archivo
- gramo seleccione un trozo para ir a
- / buscar un trozo que coincida con la expresión regular dada
- j deja este trozo indeciso, mira el siguiente trozo indeciso
- j deja este trozo indeciso, mira el siguiente trozo
- k dejar este trozo indeciso, ver trozo indeciso anterior
- k dejar este trozo indeciso, ver trozo anterior
- s dividir el trozo actual en trozos más pequeños
- mi editar manualmente el trozo actual
- Luego puede editar el trozo manualmente reemplazando
+
/-
por#
(gracias veksen)
- Luego puede editar el trozo manualmente reemplazando
- ? imprimir trozo de ayuda
Si el archivo aún no está en el repositorio, primero puede hacer git add -N <filename>
. Después puedes continuar con git add -p <filename>
.
Posteriormente, puede utilizar:
git diff --staged
para verificar que realizó los cambios correctosgit reset -p
para quitar el escenario de hunks agregados por errorgit commit -v
para ver su confirmación mientras edita el mensaje de confirmación.
Tenga en cuenta que esto es muy diferente a la git format-patch
comando, cuyo propósito es analizar los datos de confirmación en un .patch
archivos
Referencia para el futuro: Herramientas de Git: puesta en escena interactiva
-
Puede ser útil tener en cuenta que
-p/--patch
es un acceso directo a la acción de parche dentro del-i/--interactive
comando que inicia el útil Modo interactivo.– tutuDajuju
15 de febrero de 2015 a las 9:30
-
> ¿Qué sucede si ese archivo ya está preparado? Solo mostrará los cambios no preparados. Igual que
git diff
lo hace.– Eugen Konkov
3 de junio de 2015 a las 9:52
-
¿Cómo puedo editar el trozo actual manualmente? No sé qué hacer después de escribir e.
– Hunsu
1 de noviembre de 2015 a las 13:47
-
Después de presionar
e
Puede editar el trozo manualmente reemplazando+
o-
por#
– veksen
24/11/2015 a las 20:31
-
hmm… cuando lo haga
git commit file
compromete todo, no solo los cambios específicos que quería (aunquegit diff --staged
mostró solo los cambios específicos que quería) editar:git commit -p
le permitirá seleccionar los “trozos” y confirmar de una sola vez; y solo confirma los cambios específicos– Rafael
9 mayo 2019 a las 10:40
Jakub Narębski
Puedes usar git add --interactive
o git add -p <file>
y entonces git commit
(no git commit -a
); ver Modo interactivo en git-añadir página de manual, o simplemente siga las instrucciones.
Git moderno también tiene git commit --interactive
(y git commit --patch
que es un acceso directo a la opción de parche en la confirmación interactiva).
Si prefiere hacerlo desde la GUI, puede usar git-gui. Simplemente puede marcar fragmentos que desea incluir en la confirmación. Personalmente, lo encuentro más fácil que usar git add -i
. Otras GUI de git, como QGit o GitX, también pueden tener esta funcionalidad.
-
Curiosamente, windows.github.com tenía soporte para confirmaciones de archivos parciales, pero parece haberlo dejado recientemente.
– Jurí
01/09/2014 a las 20:41
-
@Juri Creo que el soporte para confirmaciones de archivos parciales está de vuelta.
– Ela782
24 de febrero de 2015 a las 10:40
-
@Juri De nada. De hecho, nunca me di cuenta de que había estado allí antes. Lo vi la semana pasada y pensé “¡oh, qué característica nueva tan asombrosa!”. 🙂
– Ela782
24 de febrero de 2015 a las 17:25
-
Hoy en día, windows.github.com redirige al GitHub Desktop renombrado, que es mejor que la GUI de Git y admite confirmaciones parciales… pero no admite la firma de confirmaciones. Suspiro.
– usuario4942583
2 de febrero de 2018 a las 0:37
-
@user4942583: Hace un año se agregó la firma de confirmación de GPG a GitHub Desktop.
– Kaios
5 de mayo a las 15:36
Ionus G. Stan
interfaz gráfica de usuario git proporciona esta funcionalidad en la vista de diferencias. Simplemente haga clic con el botón derecho en la(s) línea(s) que le interesan y debería ver un elemento de menú “preparar esta línea para confirmar”.
-
para parches complejos, este suele ser el enfoque más rápido para mí.
– hohl
8 de abril de 2015 a las 7:35
-
Esta es una forma muy eficiente e intuitiva de agregar cambios al área de preparación de manera detallada. También se pueden seleccionar varias líneas y se agregarán todos los cambios dentro de esa selección.
– Jox
26 de abril de 2015 a las 23:13
-
Tenga en cuenta que esto no es
gitk
, pero se incluye con Git Bash para Windows; debe tener una entrada en el menú de inicio para ello o puede iniciarlo con el comandogit gui
. También haystage this hunk
que es probablemente más útil questage this line
. Podría ser nuevo ya que esta respuesta se creó hace 10 años.– Chris
26 de noviembre de 2019 a las 16:37
-
Eso es lo que estaba buscando 🙂
– Sigue así
18 de diciembre de 2020 a las 9:24
-
También parece ser el único software con esta capacidad, que es compatible con Linux :/
– kdb
22 de noviembre de 2021 a las 10:29
lalibertadbanana
Yo creo eso git add -e myfile
es la forma más fácil (al menos mi preferencia) ya que simplemente abre un editor de texto y te permite elegir qué línea quieres poner en escena y qué línea no. En cuanto a los comandos de edición:
contenido añadido:
El contenido agregado está representado por líneas que comienzan con “+”. Puede evitar la puesta en escena de líneas adicionales eliminándolas.
contenido eliminado:
El contenido eliminado se representa mediante líneas que comienzan con “-“. Puede evitar organizar su eliminación convirtiendo el “-” en un ” ” (espacio).
contenido modificado:
El contenido modificado se representa con líneas “-” (que eliminan el contenido anterior) seguidas de líneas “+” (que agregan el contenido de reemplazo). Puede evitar la modificación por etapas convirtiendo las líneas “-” en ” ” y eliminando las líneas “+”. Tenga en cuenta que es probable que modificar solo la mitad del par introduzca cambios confusos en el índice.
Todos los detalles sobre git add
están disponibles en git --help add
Wenfang du
Si estás usando VS Code, estás de suerte. Seleccione el rango que desea organizar, luego use Git: Stage Selected Ranges
para ponerlos en escena y comprometerse si lo desea.
Grabé un gif para demostrar lo que quise decir:
-
¿Hay un comando git correspondiente a esto? ¿Agregar línea por línea, en lugar de la generación automática de fragmentos?
– decir y codificar
13 de agosto a las 9:24
-
@sayandcode Puede probar esto, pero creo que la GUI es más conveniente en este caso :).
– Wenfang Du
14 de agosto a las 2:31
francois
Si está utilizando vim, es posible que desee probar el excelente complemento llamado fugitivo.
Puede ver la diferencia de un archivo entre la copia de trabajo y el índice con :Gdiff
y luego agregue líneas o fragmentos al índice usando los comandos clásicos de vim diff como dp
. Guarde las modificaciones en el índice y confirme con :Gcommit
y tu estas listo.
Muy buenos screencasts introductorios. aquí (ver esp. parte 2).
-
¿Hay un comando git correspondiente a esto? ¿Agregar línea por línea, en lugar de la generación automática de fragmentos?
– decir y codificar
13 de agosto a las 9:24
-
@sayandcode Puede probar esto, pero creo que la GUI es más conveniente en este caso :).
– Wenfang Du
14 de agosto a las 2:31
bob stein
Recomiendo encarecidamente usar Árbol de origen de Atlassian. (Es gratis). Hace que esto sea trivial. Puede organizar fragmentos de código individuales o líneas de código individuales de forma rápida y sencilla.
-
Estoy de acuerdo en que SourceTree es una buena herramienta para este propósito, porque le brinda un control más detallado que el que es posible a través de la línea de comandos.
– usuario456814
12 de agosto de 2014 a las 14:29
-
@cupcake Yo diría lo contrario, dado que SourceTree probablemente usa esos ejecutables de git de línea de comando, inherentemente siempre será posible realizar las mismas (o más) acciones detalladas a través de la “línea de comando”.
– tutuDajuju
15 de febrero de 2015 a las 9:25
-
Independientemente de la de grano fino argumento que recomiendo encarecidamente Árbol de origen ya que escenificar piezas y líneas individuales es muy fácil: i.imgur.com/85bNu4C.png
–Michal Stefanow
1 de junio de 2015 a las 10:57
-
¿Qué pasa si parte del “trozo” que no quieres poner en escena? Por ejemplo, solo quiero confirmar las líneas 50-100, pero no la 1-50, pero SourceTree ve la línea 1-100 como un “trozo”.
– Sol
29/03/2016 a las 20:58
-
@Sun, puede hacer clic en la línea 50 y cambiar + hacer clic en la línea 100 y luego en el escenario. Puede organizar fácilmente la línea 50-100 en Sourcetree 🙂
– Código Mono123
17 de diciembre de 2018 a las 12:14
stackoverflow.com/q/34609924/52074 relacionado: si necesita dividir un trozo en trozos más pequeños.
– Trevor Boyd Smith
31 de octubre de 2018 a las 14:56
Resumen: en términos de capacidad:
git gui
=git add -e
>git add -i -p
; en términos de conveniencia:git gui
>git add -i -p
>git add -e
. Entonces: eligegit gui
cuando tenga acceso a X. elijagit add -i -p
para cosas simples y cuando no tiene o no quiere usar X.git add -e
para puesta en escena compleja sin X.– Penghe Geng
5 de julio de 2019 a las 16:08