Respuestas:
Esta respuesta sólo se aplica a Git versión 1.x . Para Git versión 2.x, vea otras respuestas.
Resumen:
git add -A
etapas todos los cambios
git add .
organiza nuevos archivos y modificaciones, sin eliminaciones
git add -u
realiza modificaciones y eliminaciones, sin archivos nuevos
Detalle:
git add -A
es equivalente a git add .; git add -u
.
El punto importante git add .
es que mira el árbol de trabajo y agrega todas esas rutas a los cambios organizados si se cambian o son nuevos y no se ignoran, no realiza ninguna acción 'rm'.
git add -u
mira todos los archivos ya rastreados y organiza los cambios en 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 git add .
git status
será 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
git add -A -p
que no funcione como cabría esperar (pregunte de manera interactiva sobre los archivos no rastreados)
git add -A :/
ogit add -A .
git add -u
ha convertido git add -u :/
con el último parámetro en una ruta, lo que le permite -u ciertos directorios, :/
maneja todo el árbol.
git add -u
o git add .
, y al hacerlo que hace su vida más fácil, incluso después de considerar el impuesto mentales extra añadido para asegurar que no hay problemas de sincronización? Me pregunto por qué Git no se divide add -u
en dos comandos separados add -u1
y add-u2
por el cual uno funciona para archivos que comienzan con números y el otro para archivos que comienzan con no números
Aquí hay una tabla para una comprensión rápida:
Git Versión 1.x :
Git Versión 2.x :
Banderas de forma larga:
git add -A
es equivalente a git add --all
git add -u
es equivalente a git add --update
Otras lecturas:
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
para agregar solo los archivos modificados, pero no los archivos nuevos o las eliminaciones.
git add .
solo agrega nuevos archivos que están en la ruta actual. Es decir, si tiene un nuevo directorio ../foo
, git add -A
lo organizará, git add .
no lo hará.
git add .
es equivalente a git add -A .
, que es equivalente agit add "*"
Con Git 2.0, git add -A
es predeterminado: git add .
igualgit add -A .
.
git add <path>
es lo mismo que "git add -A <path>
" ahora, de modo que "git add dir/
" notará las rutas que eliminó del directorio y registrará la eliminación.
En versiones anteriores de Git, "git add <path>
" ignoraba las eliminaciones.Puede decir "
git add --ignore-removal <path>
" para agregar solo rutas agregadas o modificadas<path>
, si realmente lo desea.
git add -A
es como git add :/
( agregar todo desde la carpeta superior de repositorio de git ).
¡Tenga en cuenta que git 2.7 (noviembre de 2015) le permitirá agregar una carpeta llamada " :
"!
Ver commit 29abb33 (25 oct 2015) por Junio C Hamano ( gitster
) .
Tenga en cuenta que al iniciar git 2.0 (Q1 o Q2 2014) , cuando se habla de git add .
(ruta actual dentro del árbol de trabajo), también debe usar ' .
' en los otros git add
comandos.
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
funcionaría (comenzando solo git 2.0) en todo el árbol de trabajo , y no solo en la ruta actual.
Esos comandos funcionarán en todo el árbol en Git 2.0 para mantener la coherencia con "
git commit -a
" y otros comandos . Debido a que no habrá ningún mecanismo para hacer que "git add -u
" se comporte como si "git add -u .
", es importante para aquellos que están acostumbrados a "git add -u
" (sin especificación de ruta) actualizar 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 en serio antes de que llegue Git 2.0.Se emite una advertencia cuando estos comandos se ejecutan sin una especificación de ruta y cuando tiene cambios locales fuera del directorio actual , porque el comportamiento en Git 2.0 será diferente de la versión actual en tal situación.
Según las instrucciones de Charles , después de probar mi comprensión propuesta sería la siguiente:
# For the next commit
$ git add . # Add only files created/modified to the index and not those deleted
$ git add -u # Add only files deleted/modified to the index and not those created
$ git add -A # Do both operations at once, add to all files to the index
Esta publicación de blog también puede ser útil para comprender en qué situación se pueden aplicar esos comandos: Eliminar archivos eliminados de su directorio de trabajo de Git .
Las cosas cambiaron con Git 2.0 ( 28/05/2014 ):
-A
ahora es el predeterminado--ignore-removal
.git add -u
y git add -A
en un subdirectorio sin caminos en la línea de comando operan en todo el árbol.Entonces, para Git 2, la respuesta es:
git add .
y git add -A .
agregue archivos nuevos / modificados / eliminados en el directorio actualgit add --ignore-removal .
agrega archivos nuevos / modificados en el directorio actualgit add -u .
agrega archivos modificados / eliminados en el directorio actualUna respuesta rápida más destilada:
git add -A
git add .
git add -u
git add :/
+git add -u :/
En Git 2.x :
Si está ubicado directamente en el directorio de trabajo , entonces git add -A
y git add .
trabaje sin la diferencia.
Si está en algún subdirectorio del directorio de trabajo , git add -A
agregará todos los archivos de todo el directorio de trabajo y git add .
agregará archivos de su directorio actual .
Y eso es todo.
Espero que esto pueda agregar más claridad.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
Los limitadores pueden ser -u o -A o nulo.
Pathspec puede ser una ruta de archivo o punto, '.' para indicar el directorio actual.
Conocimientos previos importantes sobre cómo Git 'agrega':
-A
que también se especifique. El punto 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; Cambio = Sí; Eliminar = Sí => si se rastrea el artículo.-A
= --all
(no existe -a
, lo que da un error de sintaxis) = superconjunto de todos los archivos no rastreados / rastreados, a menos que en Git antes de 2.0, en el que si se proporciona la especificación de archivos de puntos, solo se considera esa carpeta en particular. => si se reconoce el elemento, git add -A
lo encontrará y lo agregará.La ruta de acceso es la siguiente.
git add -A .
git add -u .
En conclusión, mi política es:
git status
..gitignore
archivo para que normalmente solo los archivos de interés no sean rastreados y / o no reconocidos.Ambos git add .
y git add -A
presentarán todos los archivos nuevos, modificados y eliminados en las versiones más nuevas de Git.
La diferencia es que git add -A
coloca los archivos en "subdirectorios superiores, actuales y" que pertenecen a su repositorio Git de trabajo. Pero hacer git add .
solo las etapas de los archivos en el directorio actual y los subdirectorios que lo siguen ( no los archivos que se encuentran fuera, es decir, los directorios superiores).
Aquí hay un ejemplo:
/my-repo
.git/
subfolder/
nested-file.txt
rootfile.txt
Si el directorio de trabajo actual es /my-repo
, y usted rm rootfile.txt
, a continuación cd subfolder
, seguido por git add .
, entonces no stage El archivo borrado. Pero hacerlo git add -A
ciertamente organizará este cambio sin importar desde dónde ejecute el comando.
La -A
opción agrega, modifica y elimina entradas de índice para que coincidan con el árbol de trabajo.
En Git 2, la -A
opción ahora es la predeterminada.
Cuando .
se agrega una que limita el alcance de la actualización al directorio en el que se encuentra actualmente, según la documentación de Git
Si no
<pathspec>
se da cuando se usa la opción -A, todos los archivos en todo el árbol de trabajo se actualizan (las versiones anteriores de Git se usan para limitar la actualización al directorio actual y sus subdirectorios).
Una cosa que agregaría es que si se usa el modo --interactive
o -p
, entonces git add
se comportará como si -u
se usara el indicador update ( ) y no se agreguen nuevos archivos.
git add *
?