Pregunta Diferencia entre "git add -A" y "git add".


El comando git add [--all|-A] parece ser idéntico a git add .. ¿Es esto correcto? Si no, ¿cómo difieren?


2390
2018-02-21 06:51


origen


Respuestas:


por Git versión 2.x, vea las respuestas a continuación también.


Resumen:

  • git add -A etapas Todas

  • git add . etapas nuevas y modificadas, sin eliminar

  • git add -u etapas modificadas y eliminadas, sin nuevo


Detalle:

git add -A es equivalente a git add .; git add -u.

El punto importante acerca de git add . es que mira el árbol de trabajo y agrega todas esas rutas a los cambios por etapas si se modifican o son nuevos y no se ignoran, no se crean acciones 'rm'.

git add -u mira todo el ya rastreó los archivos y las etapas de los cambios a esos archivos si son diferentes o si se han eliminado. No agrega ningún archivo nuevo, solo realiza cambios en los archivos ya rastreados.

git add -A es un atajo útil para hacer ambas cosas.

Puede probar las diferencias con algo como esto (tenga en cuenta que para Git versión 2.x su salida para git add .  git status  será sé diferente):

git init
echo Change me > change-me
echo Delete me > delete-me
git add change-me delete-me
git commit -m initial

echo OK >> change-me
rm delete-me
echo Add me > add-me

git status
# Changed but not updated:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git add .
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
# Changed but not updated:
#   deleted:    delete-me

git reset

git add -u
git status

# Changes to be committed:
#   modified:   change-me
#   deleted:    delete-me
# Untracked files:
#   add-me

git reset

git add -A
git status

# Changes to be committed:
#   new file:   add-me
#   modified:   change-me
#   deleted:    delete-me

3655
2018-02-21 09:00



Aquí hay una tabla para una comprensión rápida:

Versión 1.x de Git: enter image description here

Git versión 2.x: enter image description here

Indicadores de forma larga:

  • git add -A es equivalente a git add --all
  • git add -u es equivalente a git add --update

Otras lecturas:


646
2017-09-25 12:45



Con Git 2.0, git add -A es por defecto: git add . igual git add -A ..

git add <path> es lo mismo que "git add -A <path>"ahora, para que   "git add dir/"notará las rutas que eliminó del directorio y   registrar la eliminación.
  En versiones anteriores de Git, "git add <path>"Solía ​​ignorar las eliminaciones.

Puedes decir "git add --ignore-removal <path>" a   agregar solo rutas agregadas o modificadas en <path>, Si de verdad quieres.

git add es como git add :/ (agregar todo desde la carpeta superior git repo)
Tenga en cuenta que git 2.7 (noviembre de 2015) le permitirá agregar una carpeta llamada ":"¡!
Ver cometer 29abb33 (25 de octubre de 2015) por Junio ​​C Hamano (gitster).


Tenga en cuenta que iniciando git 2.0 (Q1 o Q2 2014)cuando hablas de git add . (ruta actual dentro del árbol de trabajo), debe usar '.' en el otro git add comandos también.

Eso significa:

"git add -A ." es equivalente a "git add .; git add -u ."

(Tenga en cuenta el extra '.' para git add -A y git add -u)

Porque git add -A o git add -u operaría (comenzando git 2.0 solamente) en el todo el árbol de trabajo, y no solo en la ruta actual.

Esos comandos operar en todo el árbol en Git 2.0 para coherencia con "git commit -a"y otros comandos.   Porque no habrá ningún mecanismo para hacer "git add -u"comportarse como si"git add -u .", es importante para aquellos que están acostumbrados a"git add -u"(sin pathspec) actualizando el índice solo para las rutas en el subdirectorio actual para comenzar a entrenar sus dedos para decir explícitamente"git add -u ."cuando lo dicen antes de que llegue Git 2.0.

Se emite una advertencia cuando estos comandos se ejecutan sin una ruta de acceso y cuando tiene cambios locales fuera del directorio actual, porque el comportamiento en Git 2.0 será diferente   de la versión de hoy en tal situación.


135
2018-04-23 06:32



Entonces, según las instrucciones de Charles anteriores, después de probar mi comprensión propuesta sería la siguiente:

# For the next commit
$ git add .   # add to index only files created/modified and not those deleted
$ git add -u  # add to index only files deleted/modified and not those created
$ git add -A  # do both operation at once, add to index all files

Este enlace también puede ser útil para entender en qué situación se pueden aplicar esos comandos: Eliminar archivos eliminados de su directorio de trabajo de Git.


126
2018-06-01 09:27



Tarde en la fiesta, pero esta pregunta también merece una respuesta rápida más destilada.

git add -A 

Hace ambos debajo (igual que git add --todo)

git add . 

Etapas nuevas + archivos modificados

git add -u 

Etapas modificadas + archivos eliminados


26
2018-04-06 12:56



Las cosas cambiaron con Git 2.0:

  • -A ahora es el predeterminado
  • el viejo comportamiento ahora está disponible con --ignore-removal
  • git add -u y git add -A en un subdirectorio sin caminos en la línea de comando operar en todo el árbol

Entonces para git 2 la respuesta es:

  • git add . y git add -A . agregar archivos nuevos / modificados / eliminados en el directorio actual
  • git add --ignore-removal . agrega archivos nuevos / modificados en el directorio actual
  • git add -u . agrega archivos modificados / eliminados en el directorio actual
  • sin el punto, agregue todos los archivos en el proyecto, independientemente del directorio actual

23
2017-10-13 15:29



Finalmente creo que entiendo esto, muchas gracias a todos ustedes. Espero que esto pueda agregar algo más de claridad.

!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)

Los limitadores pueden ser -u o -A o nil.

Pathspec puede ser un filepath o punto, '.' para indicar el directorio actual.

Conocimiento básico importante sobre cómo 'git' agrega.

  • Los archivos invisibles, aquellos prefijados con un punto, (archivos de puntos) nunca son reconocidos automáticamente por Git. Nunca están listados como 'sin seguimiento'.
  • Las carpetas vacías nunca son agregadas por git. Nunca están listados como 'sin seguimiento'. (Una solución alternativa es agregar un archivo en blanco, posiblemente invisible, a los archivos rastreados).
  • El estado de Git no mostrará la información de la subcarpeta, es decir, los archivos sin seguimiento, a menos que se rastree al menos un archivo en esa subcarpeta. Antes de ese momento, git considera que toda la carpeta está fuera del alcance, a la 'vacía'. Está vacío de artículos rastreados.
  • Especificando una especificación de archivos = '.' (punto), o el directorio actual, no es recursivo a menos que -A también se especifique. Dot se refiere estrictamente al directorio actual; omite las rutas que se encuentran arriba y abajo.

Ahora, dado ese conocimiento, podemos aplicar las respuestas anteriores.

Los limitadores son los siguientes.

  • -u = --update = subconjunto a archivos rastreados => Agregar = No; Cambiar = Sí; Eliminar = Sí. => iff el artículo es rastreado.
  • -A = --all (no such -a, que da error de sintaxis) = superconjunto de todos los archivos no rastreados / rastreados, a menos que en Git <2.0, donde si se proporciona la especificación de archivos de punto, solo se considere esa carpeta en particular. => si el elemento es reconocido, git add -A lo encontrará y lo agregará.

El pathspec es el siguiente.

  • En Git <2.0, para los dos limitadores (actualización y todo), el nuevo valor predeterminado es operar en todo el árbol de trabajo, en lugar de la ruta actual (git <= 1.9),
  • Sin embargo, en v2.0, la operación puede limitarse a la ruta actual: simplemente agregue el sufijo de punto explícito (que también es válido en Git <= 1.9);

git add -A .

git add -u .

En conclusión, mi política es;

  • 1. Asegúrate de que cualquier hunks / archivos que se agregue se contabilicen en estado de git.
  • 1A.Si falta algún elemento debido a archivos / carpetas invisibles, agréguelos por separado.
  • 2. Tener un buen gitignore, por lo que normalmente solo los archivos de interés no se registran y / o no se reconocen.
  • 3.Desde el nivel superior del repositorio, "git add -A" para agregar todos los artículos. Esto funciona en todas las versiones de git.
  • 4. Retire los elementos deseados del índice si lo desea.
  • 6.Si hay un gran error, haga 'git reset' para borrar el índice por completo.

11
2018-04-06 02:03