ver tres son soft sirve qué podemos para modificados los hacer example estados cuáles con cambios archivos archivo git git-commit

git - tres - ¿para qué sirve reset soft?



Cometer solo parte de un archivo en Git (22)

Cuando hago cambios en un archivo en Git, ¿cómo puedo confirmar solo algunos de los cambios?

Por ejemplo, ¿cómo podría cometer solo 15 líneas de 30 líneas que se han cambiado en un archivo?


Al igual que en la respuesta de jdsumsion, también puede esconder su trabajo actual, pero luego usar una combinación de estilo de herramienta para extraer los cambios seleccionados del alijo. De esa manera, incluso puedes editar los trozos manualmente de manera muy fácil, lo cual es un poco molesto cuando en git add -p :

$ git stash -u $ git difftool -d -t meld stash $ git commit -a -m "some message" $ git stash pop

El uso del método de ocultación le da la oportunidad de probar, si su código aún funciona, antes de cometerlo.


Como se muestra en una de las respuestas anteriores, puede usar git add --patch filename.txt

o el git add -p filename.txt formato corto git add -p filename.txt

... pero para los archivos que ya están en su repositorio, hay, en s están mucho mejor usando el indicador --patch en el comando commit (si está usando una versión suficientemente reciente de git): git commit --patch filename.txt

... o, de nuevo, el git commit -p filename.txt forma corta git commit -p filename.txt

... y luego utilizando las teclas mencionadas, (y / n, etc.), para elegir las líneas que se incluirán en el compromiso.


Con TortoiseGit:

Haga clic derecho en el archivo y use el Context Menu → Restore after commit . Esto creará una copia del archivo tal como está. Luego, puede editar el archivo, por ejemplo, en TortoiseGitMerge y deshacer todos los cambios que no desea confirmar. Después de guardar esos cambios puedes cometer el archivo.


Creo que 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 escalonar y qué línea no. Respecto a los comandos de edición:

contenido añadido:

El contenido agregado está representado por líneas que comienzan con "+". Puedes evitar la preparación de líneas de adición eliminándolas.

contenido eliminado

El contenido eliminado se representa mediante líneas que comienzan con "-". Puede evitar que su eliminación se convierta convirtiendo el "-" en un "" (espacio).

contenido modificado:

El contenido modificado se representa con "-" líneas (eliminando el contenido anterior) seguido de "+" líneas (agregando el contenido de reemplazo). Puede evitar la puesta en escena de la modificación convirtiendo las líneas "-" en "" y eliminando las líneas "+". Tenga en cuenta que modificar solo la mitad del par puede introducir cambios confusos en el índice.

Todos los detalles sobre git add están disponibles en git --help add


Cuando tenga muchos cambios y termine creando algunas confirmaciones a partir de los cambios, quiero guardar mi punto de partida temporalmente antes de organizar las cosas.

Me gusta esto:

$ git stash -u Saved working directory and index state WIP on master: 47a1413 ... $ git checkout -p stash ... step through patch hunks $ git commit -m "message for 1st commit" $ git checkout -p stash ... step through patch hunks $ git commit -m "message for 2nd commit" $ git stash pop

La respuesta de Whymarrh es lo que generalmente hago, excepto que a veces hay muchos cambios y puedo decir que podría cometer un error al organizar las cosas, y quiero un estado comprometido al que pueda recurrir para un segundo pase.


Para aquellos que usan Git Extensions :

En la ventana Confirmar, seleccione el archivo que desea confirmar parcialmente, luego seleccione el texto que desea confirmar en el panel derecho, luego haga clic con el botón derecho en la selección y elija "Escenario líneas seleccionadas" en el menú contextual.


Para emacs también hay gitsum


Para los usuarios de Atom , el paquete github incluye una puesta en escena interactiva, al estilo de git gui . Para los accesos directos ver la documentation del paquete.

El uso de Atom permite trabajar con un tema que tiene un fondo oscuro (de forma predeterminada, git gui tiene un fondo blanco).



Puede usar git add --interactive o git add -p < file > , y luego git commit ( no git commit -a ); Consulte el modo interactivo en la página de git-add , o simplemente siga las instrucciones.

Modern Git también tiene git commit --interactive (y git commit --patch , que es la opción de acceso directo a parche en el commit interactivo).

Si prefieres hacerlo desde GUI, puedes usar git-gui . Simplemente puede marcar los fragmentos que desea incluir en la confirmación. Personalmente me parece más fácil que usar git add -i . Otras GUIs de git, como QGit o GitX, también pueden tener esta funcionalidad.


Recomiendo encarecidamente utilizar SourceTree de Atlassian. (Es gratis.) Hace esto trivial. Puede organizar fragmentos de código individuales o líneas de código individuales de forma rápida y sencilla.


Si agrega una respuesta anterior, si prefiere usar la línea de comandos, al ingresar git add -e myfile le da la opción de elegir línea por línea lo que desea confirmar porque este comando abrirá un editor con las diferencias, como por ejemplo:

Como usted sabe, las líneas que comienzan con + son adiciones, las líneas que comienzan con - son eliminaciones. Asi que:

  • Para no realizar una adición simplemente borre esa línea.
  • Para no realizar una eliminación simplemente reemplaza - con espacio .

Esto es lo que dice git add -h acerca de agregar archivos de esta manera (parcheando archivos):

contenido agregado El contenido agregado está representado por líneas que comienzan con "+". Puedes evitar la preparación de líneas de adición eliminándolas.

contenido eliminado: el contenido eliminado se representa mediante líneas que comienzan con "-". Puede evitar que su eliminación se convierta convirtiendo el "-" en un "" (espacio).

contenido modificado: el contenido modificado se representa con "-" líneas (eliminando el contenido anterior) seguido de "+" líneas (agregando el contenido de reemplazo). Puede evitar la puesta en escena de la modificación convirtiendo las líneas "-" en "" y eliminando las líneas "+". Tenga en cuenta que modificar solo la mitad del par puede introducir cambios confusos en el índice.

Precaución: no cambie el contenido del archivo, este no es un buen lugar para hacerlo. Solo cambia los operadores de lineas eliminadas o agregadas.


Si está en la plataforma Windows , en mi opinión, git gui es la mejor herramienta para poner en stage / commit algunas líneas desde un archivo sin stage .

1. Hunk sabio:

  • Seleccione el archivo de la sección de unstagged Changes
  • Haga clic con el botón derecho en el fragmento de código que se debe organizar
  • Seleccione Stage Hunk for commit

2. Línea sabia:

  • Seleccione el archivo de la sección de unstagged Changes
  • Seleccione la línea / líneas en escena
  • Seleccione Stage Lines for commit

3. Si desea escalonar el archivo completo excepto un par de líneas:

  • Seleccione el archivo de la sección de unstagged Changes
  • Presiona Ctrl+T (Stage file to commit)
  • El archivo seleccionado ahora se mueve a la sección de Staged Changes Preparados
  • Seleccione la línea / líneas en escena
  • Seleccione UnStage Lines for commit

Si está utilizando vim, puede probar el excelente complemento llamado fugitive .

Puede ver la diferencia de un archivo entre la copia de trabajo y el índice con :Gdiff , y luego agregar líneas o fragmentos al índice usando los comandos clásicos de vim diff como dp . Guarda las modificaciones en el índice y confirma con :Gcommit , y listo.

Muy buenos screencast introductorios here (ver esp. Parte 2 ).


Si usa emacs, eche un vistazo a Magit , que proporciona una interfaz git para emacs. Es compatible con trozos de escenificación (partes de archivos) bastante bien.


Vale la pena señalar que para usar git add --patch para un nuevo archivo , primero debe agregar el archivo al índice con git add --intent-to-add :

git add -N file git add -p file


git-cola es una excelente GUI y también tiene esta característica incorporada. Solo tienes que seleccionar las líneas para poner en escena y presiona S. Si no se hace ninguna selección, el hunk completo se pone en escena.


vim-gitgutter complemento vim-gitgutter puede organizar hunks sin dejar el editor vim usando

:GitGutterStageHunk

Además de esto, proporciona otras características interesantes como una columna de signo de diferencia como en algunos IDEs modernos

Si solo parte del hunk debe ser fugitive escena

:Gdiff

permite la selección del rango visual luego :''<,''>diffput o :''<,''>diffget para realizar / revertir los cambios de línea individuales.


git-meld-index - citando desde el sitio web:

git-meld-index ejecuta meld (o cualquier otro git difftool (kdiff3, difuso, etc.) para permitirle realizar cambios interactivos en el índice de git (también conocido como área de clasificación de git).

Esto es similar a la funcionalidad de git add -p, y git add --interactive. En algunos casos, meld es más fácil / rápido de usar que git add -p. Eso es porque meld te permite, por ejemplo, a:

  • ver más contexto
  • ver diferencias en línea
  • Edite a mano y vea las actualizaciones de diferencias ''en vivo'' (actualizadas después de cada pulsación de tecla)
  • navegue a un cambio sin decir ''n'' a cada cambio que desee omitir

Uso

En un repositorio git, ejecute:

git meld-index

Verás meld (o tu git difftool configurado) emergente con:

IZQUIERDA : directorio temporal que continúa con los archivos copiados de su árbol de trabajo

DERECHA : directorio temporal con los contenidos del índice. Esto también incluye los archivos que aún no están en el índice pero que se modifican o no se rastrean en la copia de trabajo; en este caso, verá el contenido del archivo de HEAD.

Editar el índice (lado derecho) hasta que esté feliz. Recuerde guardar cuando sea necesario.

Cuando haya terminado, cierre meld, y git-meld-index actualizará el índice para que coincida con el contenido del directorio temporal en el lado derecho de meld que acaba de editar.


Intellij IDEA (y supongo que todos los demás productos de la serie) ha incorporado soporte para confirmaciones parciales desde v2018.1


git gui proporciona esta funcionalidad bajo la vista de diferencias. Simplemente haga clic derecho en la (s) línea (s) en la que está interesado y debería ver un elemento del menú "Preparar esta línea para confirmar".


Puede usar git add --patch <filename> (o -p para abreviar), y git comenzará a dividir su archivo en lo que cree que son "trozos" razonables (partes del archivo). Entonces le preguntará 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 etapa este trozo para el próximo compromiso
  • n no escenifiquen este hunk para el próximo commit
  • q renuncio no ponga en escena este trozo o cualquiera de los trozos restantes
  • una etapa este trozo y todos los tíos posteriores en el archivo
  • D No hagas este hunk o cualquiera de los tíos posteriores en el archivo.
  • g selecciona un trozo para ir a
  • / búsqueda de un trozo que coincida con la expresión regular dada
  • j dejar este trozo indeciso, ver el siguiente trozo indeciso
  • J dejar este trozo indeciso, ver siguiente trozo
  • k deja este trozo indeciso, ver anterior trozo indeciso
  • K deja este trozo indeciso, ver trozo anterior
  • s dividir el trozo actual en trozos más pequeños
  • e editar manualmente el trozo actual
  • ? ayuda del trozo de impresión

Si el archivo aún no está en el repositorio, primero puede hacer git add -N <filename> . Después, puede continuar con git add -p <filename> .

Después, puede utilizar:
git diff --staged para verificar que haya realizado los cambios correctos
git reset -p a los tacos agregados por error
git commit -v para ver su confirmación mientras edita el mensaje de confirmación.

Tenga en cuenta que esto es muy diferente al comando git format-patch , cuyo propósito es analizar los datos de confirmación en archivos .patch .

Referencia para el futuro: https://git-scm.com/book/en/v2/Git-Tools-Interactive-Staging