Команда git add [--all|-A] оказывается идентичной git add .. Это верно? Если нет, то как они отличаются?
Разница между "git add -A" и "git add".
Ответ 1
Этот ответ относится только к Git версии 1.x. Для Git версии 2.x см. Другие ответы.
Резюме:
-  git add -Aставит все изменения
-  git add.вносит новые файлы и модификации, без удаления
-  git add -uэтапы модификации и удаления, без новых файлов
Деталь:
 git add -A эквивалентен git add.; git add -u git add.; git add -u.
 Важный момент о git add. является то, что он смотрит на рабочее дерево и добавляет все эти пути к поэтапным изменениям, если они либо изменены, либо являются новыми и не игнорируются, он не выполняет никаких действий 'rm'.
 git add -u просматривает все уже отслеженные файлы и вносит изменения в эти файлы, если они отличаются или были удалены. Он не добавляет никаких новых файлов, он только вносит изменения в уже отслеженные файлы.
 git add -A - это удобный ярлык для выполнения обеих git add -A.
 Вы можете проверить различия следующим образом (обратите внимание, что для Git версии 2.x ваш вывод для git add. git status будет другим):
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
Ответ 2
Вот таблица для быстрого понимания:
Git Version 1.x:

Git версии 2.x:

Длинные флаги:
- git add -Aэквивалентно- git add --all
- git add -uэквивалентен- git add --update
Дальнейшее чтение:
Ответ 3
С   Git 2.0, git add -A по умолчанию: git add . равно git add -A ..
git add <path>теперь совпадает с "git add -A <path>", так что "git add dir/" будет видеть пути, которые вы удалили из каталога, и запишите удаление.
В старых версиях Git, "git add <path>" используется для игнорирования удаления.Вы можете сказать "
git add --ignore-removal <path>", чтобы добавьте только добавленные или измененные пути в<path>, если вы действительно этого хотите.
 git add похож на git add :/ (добавить все из верхней папки git repo). 
Обратите внимание, что git 2.7 (ноябрь 2015) позволит вам добавить папку с именем ":"!
См. передать 29abb33 (25 октября 2015 г.) Junio C Hamano (gitster).
Обратите внимание, что начало git 2.0 (Q1 или Q2 2014), когда речь идет о  git add . ( текущий путь в рабочем дереве), вы должны использовать '.' в других командах git add.
Это означает:
"
git add -A ." эквивалентно "git add .; git add -u ."
(Обратите внимание на дополнительный "." для git add -A и git add -u)
Потому что git add -A или git add -u будет работать (только начиная с git 2.0) в  рабочем дереве, а не только на текущем пути.
Эти команды будут работать на всем дереве в git 2.0 для согласованности с "
git commit -a" и другими командами. Поскольку механизм "git add -u" не будет вести себя так, как будто "git add -u .", это важно для тех, кто используется для "git add -u" (без pathspec), обновляющего индекс только для путей в текущем подкаталоге чтобы начать тренировать пальцы, чтобы явно сказать "git add -u .", когда они означают его до появления git 2.0.Предупреждение выдается, когда эти команды запускаются без указания пути и при локальных изменениях за пределами текущего каталога, поскольку поведение в git 2.0 будет отличаться от сегодняшней версии в такой ситуации.
Ответ 4
Из инструкций Чарльза, после проверки мое предлагаемое понимание будет следующим:
# 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
Этот пост в блоге также может быть полезен для понимания ситуации, в которой могут применяться эти команды: Удаление удаленных файлов из вашего рабочего каталога Git.
Ответ 5
Более дистиллированный быстрый ответ:
Делает ли оба ниже (так же, как git add --all)
git add -A
Этапы новые + измененные файлы
git add .
Этапы изменены + удаленные файлы
git add -u
Ответ 6
Вещи изменились с Git 2.0:
- -Aтеперь по умолчанию
- Старое поведение теперь доступно с --ignore-removal.
- git add -uи- git add -Aв подкаталоге без путей в командной строке работают со всем деревом.
Так что для Git 2 ответ:
- git add .и- git add -A .добавляют новые/измененные/удаленные файлы в текущий каталог
- git add --ignore-removal .добавляет новые/измененные файлы в текущий каталог
- git add -u .добавляет измененные/удаленные файлы в текущий каталог
- Без точки добавьте все файлы в проект независимо от текущего каталога.
Ответ 7
В Git 2.x:
-  Если вы находитесь прямо в рабочем каталоге, то git add -Aиgit add.работать без разницы.
-  Если вы находитесь в каком-либо подкаталоге рабочего каталога, git add -Aдобавит все файлы из всего рабочего каталога иgit add.добавит файлы из вашего текущего каталога.
И это все.
Ответ 8
Я надеюсь, что это может добавить больше ясности.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
Ограничителями могут быть -u, -A или ноль.
Pathspec может быть путем к файлу или точкой, '.' чтобы указать текущий каталог.
Важные знания о том, как Git "добавляет":
- Невидимые файлы с префиксом точки (файлы точек) никогда не распознаются Git автоматически. Они даже не указаны как "неотслеживаемые".
- Пустые папки никогда не добавляются Git. Они даже не указаны как "неотслеживаемые". (Временное решение: добавить пустой файл, возможно, невидимый, в отслеживаемые файлы.)
- Состояние Git не будет отображать информацию о подпапках, то есть неотслеживаемых файлах, если не отслежен хотя бы один файл в этой подпапке. До этого Git считает всю папку вне области видимости а-ля "пустая". В нем нет отслеживаемых предметов.
- Указание filespec = '.' (точка) или текущий каталог не является рекурсивным, если только не указано -A. Точка относится только к текущему каталогу - она не содержит пути, найденные выше и ниже.
Теперь, учитывая это знание, мы можем применить ответы выше.
Ограничители следующие.
- -u=- --update= подмножество отслеживаемых файлов => Добавить = Нет; Изменить = Да; Удалить = Да. => если элемент отслеживается.
- -A=- --all(нет такого- -a, который дает синтаксическую ошибку) = надмножество всех неотслеживаемых/отслеживаемых файлов, за исключением случаев, когда в Git до 2.0, где, если задана точечная спецификация файла, рассматривается только эта конкретная папка. => если элемент распознан,- git add -Aнайдет его и добавит.
Pathspec выглядит следующим образом.
- В Git до 2.0 для двух ограничителей (update и all) новым значением по умолчанию является работа со всем рабочим деревом вместо текущего пути (Git 1.9 или более ранней версии),
- Однако в версии 2.0 операция может быть ограничена текущим путем: просто добавьте явный суффикс точки (который также действителен в Git 1.9 или более ранней версии);
git add -A .
git add -u .
В заключение, моя политика:
- Убедитесь, что любые фрагменты/файлы, которые будут добавлены, учтены в git status.
- Если какие-либо элементы отсутствуют, из-за невидимых файлов/папок добавьте их отдельно.
- Иметь хороший файл .gitignore, чтобы обычно только интересующие его файлы не отслеживались и/или не распознавались.
- На верхнем уровне хранилища "git add -A", чтобы добавить все элементы. Это работает во всех версиях Git.
- При желании удалите все нужные элементы из индекса.
- Если есть большая ошибка, выполните git reset, чтобы полностью очистить индекс.
Ответ 9
 git add . equals git add -A . добавляет файлы к индексу только из текущей и дочерних папок.
 git add -A добавляет файлы к индексу из всех папок в рабочем дереве.
P.S.: информация относится к Git 2.0.
Ответ 10
Оба git add . и git add -A будут помещать все новые, измененные и удаленные файлы в более новые версии Git.
Разница в том, что git add -A размещает файлы в "старших, текущих и подкаталогах", которые принадлежат вашему рабочему репозиторию Git. Но выполнение git add . ставит только файлы в текущем каталоге и подкаталогах, следующих за ним (не файлы, лежащие снаружи, т.е. более высокие каталоги).
Вот пример:
/my-repo
  .git/
  subfolder/
    nested-file.txt
  rootfile.txt
Если текущим рабочим каталогом является /my-repo, и вы делаете rm rootfile.txt, затем cd subfolder, а затем git add ., тогда он не будет помещать в удаленный файл. Но выполнение git add -A определенно внесет это изменение независимо от того, откуда вы выполняете команду.
Ответ 11
Опция -A добавляет, изменяет и удаляет записи индекса в соответствии с рабочим деревом.
В Git 2 опция -A теперь используется по умолчанию.
Когда добавлен ., который ограничивает область обновления каталогом, в котором вы находитесь в настоящее время, согласно документации Git
Если при использовании опции -A значение
<pathspec>не задано, обновляются все файлы во всем рабочем дереве (старые версии Git использовались для ограничения обновления текущего каталога и его подкаталогов).
Я хотел бы добавить, что если используется режим --interactive или -p, то git add будет вести себя так, как если бы использовался флаг обновления (-u), а не добавлять новые файлы.
