Git
Puesta en escena
Buscar..
Observaciones
Vale la pena señalar que la puesta en escena tiene poco que ver con los "archivos" en sí mismos y todo que ver con los cambios dentro de cada archivo dado. Preparamos archivos que contienen cambios, y git rastrea los cambios como confirmaciones (incluso cuando los cambios en una confirmación se realizan en varios archivos).
La distinción entre archivos y confirmaciones puede parecer menor, pero comprender esta diferencia es fundamental para comprender funciones esenciales como cherry-pick y diff. (Vea la frustración en los comentarios sobre la complejidad de una respuesta aceptada que propone a cherry-pick como una herramienta de administración de archivos ).
¿Qué es un buen lugar para explicar conceptos? ¿Está en los comentarios?
Conceptos clave:
Un archivo es la metáfora más común de los dos en tecnología de la información. La mejor práctica dicta que un nombre de archivo no cambie a medida que cambia su contenido (con algunas excepciones reconocidas).
Un commit es una metáfora que es única para la gestión del código fuente. Los compromisos son cambios relacionados con un esfuerzo específico, como una corrección de errores. Los compromisos a menudo implican varios archivos. Una sola corrección de errores menores puede implicar ajustes a las plantillas y css en archivos únicos. A medida que se describe, desarrolla, documenta, revisa e implementa el cambio, los cambios en los archivos separados se pueden anotar y manejar como una sola unidad. La única unidad en este caso es el commit. Igualmente importante, centrarse solo en la confirmación durante una revisión permite que las líneas de código sin cambios en los diversos archivos afectados se ignoren de forma segura.
Puesta en escena de un solo archivo
Para preparar un archivo para cometer, ejecute
git add <filename>
Puesta en escena de todos los cambios en los archivos
git add -A
git add .
En la versión 2.x, git add .
realizará todos los cambios a los archivos en el directorio actual y todos sus subdirectorios. Sin embargo, en 1.x solo incluirá archivos nuevos y modificados, no archivos eliminados .
Use git add -A
, o su comando equivalente git add --all
, para realizar todos los cambios en los archivos en cualquier versión de git.
Archivos borrados del escenario
git rm filename
Para eliminar el archivo de git sin quitarlo del disco, use el indicador --cached
git rm --cached filename
Unstage un archivo que contiene cambios
git reset <filePath>
Complemento interactivo
git add -i
(o --interactive
) le dará una interfaz interactiva donde podrá editar el índice, para preparar lo que desea tener en el próximo compromiso. Puede agregar y eliminar cambios a archivos completos, agregar archivos sin seguimiento y eliminar los archivos que se rastrean, pero también puede seleccionar la subsección de cambios para colocar en el índice, seleccionando fragmentos de cambios para agregar, dividir esos fragmentos o incluso editar el diff . Muchas herramientas de confirmación gráficas para Git (como p. Ej. Git git gui
) incluyen dicha característica; esto podría ser más fácil de usar que la versión de línea de comandos.
Es muy útil (1) si ha realizado cambios entrelazados en el directorio de trabajo que desea colocar en confirmaciones por separado, y no todos en una única confirmación (2) si se encuentra en medio de una rebase interactiva y desea dividir también gran compromiso.
$ git add -i
staged unstaged path
1: unchanged +4/-4 index.js
2: +1/-0 nothing package.json
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
La mitad superior de esta salida muestra el estado actual del índice dividido en columnas escalonadas y no escalonadas:
-
index.js
ha agregado 4 líneas aindex.js
y se han eliminado 4 líneas. Actualmente no está en escena, ya que el estado actual informa "sin cambios". Cuando este archivo se convierta en un escenario, el bit+4/-4
se transferirá a la columna de estadios y la columna no escalonada leerá "nada". -
package.json
ha tenido una línea agregada y ha sido puesta en escena. No hay más cambios ya que se ha efectuado como se indica en la línea "nada" debajo de la columna sin etapas.
La mitad inferior muestra lo que puedes hacer. Ingrese un número (1-8) o una letra ( s
, u
, r
, a
, p
, d
, q
, h
).
status
muestra la salida idéntica a la parte superior de la salida anterior.
update
permite realizar más cambios en las confirmaciones preparadas con sintaxis adicional.
revert
devolverá la información de confirmación por etapas a HEAD.
add untracked
permite add untracked
que no fueron rastreadas anteriormente por el control de versiones.
patch
permite seleccionar una ruta de una salida similar al status
para un análisis posterior.
diff
muestra lo que se comprometerá
quit
sale del comando.
help
presenta help
adicional sobre el uso de este comando.
Añadir cambios por hunk
Puede ver qué "trozos" de trabajo se pondrían en escena para confirmar usando la marca de parche:
git add -p
o
git add --patch
Esto abre un aviso interactivo que le permite ver las diferencias y decidir si desea incluirlas o no.
Stage this hunk [y,n,q,a,d,/,s,e,?]?
- 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
Esto facilita la captura de cambios que no desea confirmar.
También puede abrirlo a través de git add --interactive
y seleccionando p
.
Mostrar cambios por etapas
Para mostrar los trozos que están en escena para cometer:
git diff --cached