Команда git add [--all|-A]
оказывается идентичной git add .
. Это верно? Если нет, то как они отличаются?
Этот ответ относится только к 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
Вот таблица для быстрого понимания:
Git Версия 1.x:
Git Версия 2.x:
Флаги длинной формы:
git add -A
эквивалентен git add --all
git add -u
эквивалентен git add --update
Дальнейшее чтение:
git diff-files -z --diff-filter=M --name-only | xargs -0 git add
для добавления только измененных файлов, но не новых файлов или удалений.
С 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 будет отличаться от сегодняшней версии в такой ситуации.
.
, Включил их в мой сборник о add
на RU.SO.
Итак, из приведенных выше инструкций Чарльза, после тестирования мое предложенное понимание будет следующим:
# 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
Эта ссылка может также помочь понять, в какой ситуации могут применяться эти команды: Удаление удаленных файлов из рабочего каталога Git.
Поздно к партии, но этот вопрос также заслуживает более дистиллированного быстрого ответа.
git add -A
Означает ли это ниже (так же, как git add -all)
git add .
Этапы новых + измененных файлов
git add -u
Обновлены этапы + удаленные файлы
Все изменилось с помощью 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 .
добавляет измененные/удаленные файлы в текущий каталогВ Git 2.x:
Если вы находитесь прямо в рабочем каталоге, то git add -A
и git add.
работать без разницы.
Если вы находитесь в каком-либо подкаталоге рабочего каталога, git add -A
добавит все файлы из всего рабочего каталога и git add.
добавит файлы из вашего текущего каталога.
И это все.
Наконец, я думаю, что получаю это, большое спасибо всем вам. Надеюсь, это может добавить некоторую ясность.
!The syntax is
git add <limiters> <pathspec>
! Aka
git add (nil/-u/-A) (nil/./pathspec)
Ограничители могут быть -u или -A или nil.
Pathspec может быть файловой точкой или точкой, '.' для указания текущего каталога.
Знание базовых знаний о том, как git добавляет '.
Теперь, учитывая это знание, мы можем применить ответы выше.
Ограничители следующие.
Ниже приведен путь.
git add -A .
git add -u .
В заключение моя политика такова;
git add .
equals git add -A .
добавляет файлы к индексу только из текущей и дочерних папок.
git add -A
добавляет файлы к индексу из всех папок в рабочем дереве.
P.S.: информация относится к Git 2.0.
Опция -A добавляет, изменяет и удаляет записи индекса в соответствии с рабочим деревом.
В GIT 2 опция -A
теперь используется по умолчанию.
Когда а .
добавлено, что ограничивает область обновления до каталога, в котором вы находитесь в настоящее время, согласно документации Git
Если при использовании опции -A не
<pathspec>
, обновляются все файлы во всем рабочем дереве (старые версии Git использовались для ограничения обновления текущим каталогом и его подкаталогами).
Я хотел бы добавить, что если используется режим --interactive
или -p
, то git add будет вести себя так, как если бы использовался флаг обновления (-u
), а не добавлять новые файлы.
git add *
?