El comando git add [--all|-A]
parece ser idéntico a git add .
. ¿Es esto correcto? Si no, ¿en qué se diferencian?
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 *
?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 convertidogit add -u :/
con el último parámetro en una ruta, lo que le permite -u ciertos directorios,:/
maneja todo el árbol.git add -u
ogit 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 divideadd -u
en dos comandos separadosadd -u1
yadd-u2
por el cual uno funciona para archivos que comienzan con números y el otro para archivos que comienzan con no númerosAquí 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 agit add --all
git add -u
es equivalente agit add --update
Otras lecturas:
fuente
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 agit add -A .
, que es equivalente agit add "*"
Con Git 2.0,
git add -A
es predeterminado:git add .
igualgit add -A .
.git add -A
es comogit 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 otrosgit add
comandos.Eso significa:
(Tenga en cuenta el extra '
.
' paragit add -A
ygit add -u
)Porque
git add -A
ogit add -u
funcionaría (comenzando solo git 2.0) en todo el árbol de trabajo , y no solo en la ruta actual.fuente
Según las instrucciones de Charles , después de probar mi comprensión propuesta sería la siguiente:
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 .
fuente
Las cosas cambiaron con Git 2.0 ( 28/05/2014 ):
-A
ahora es el predeterminado--ignore-removal
.git add -u
ygit 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 .
ygit 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 actualfuente
Una respuesta rápida más destilada:
¿Ambos a continuación (igual que git agrega --todos )
Etapas de archivos nuevos + modificados
Etapas modificadas + archivos eliminados
fuente
git add :/
+git add -u :/
En Git 2.x :
Si está ubicado directamente en el directorio de trabajo , entonces
git add -A
ygit 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 ygit add .
agregará archivos de su directorio actual .Y eso es todo.
fuente
Espero que esto pueda agregar más claridad.
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.fuente
git add .
es igualgit add -A .
agrega archivos al índice solo de las carpetas actuales y secundarias.git add -A
agrega archivos al índice de todas las carpetas en el árbol de trabajo.PD: la información se relaciona con Git 2.0 (2014-05-28).
fuente
Ambos
git add .
ygit 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 hacergit 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:
Si el directorio de trabajo actual es
/my-repo
, y ustedrm rootfile.txt
, a continuacióncd subfolder
, seguido porgit add .
, entonces no stage El archivo borrado. Pero hacerlogit add -A
ciertamente organizará este cambio sin importar desde dónde ejecute el comando.fuente
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 GitUna cosa que agregaría es que si se usa el modo
--interactive
o-p
, entoncesgit add
se comportará como si-u
se usara el indicador update ( ) y no se agreguen nuevos archivos.fuente