Какая разница между `git add.` и` git add -u`?

Я предполагал, что оба работают одинаково. Оба добавляют каждый файл в индекс. Но я, кажется, ошибаюсь.

  • Какая разница между git add . и git add -u?

Ответ 1

Это один из git gotchas упомянутый здесь (pre git 2.0).

git add . добавляет только то, что есть, а не то, что было удалено (если отслеживается).

git add .
git commit
git status
//hey! why didn't it commit my deletes?, Oh yeah, silly me
git add -u .
git commit --amend

git add -A будет заботиться обо всех этих шагах...


С Git 2.0, git add -A по умолчанию.

git add <path> теперь совпадает с "git add -A <path>", так что "git add dir/" увидит пути, которые вы удалили из каталога, и запишите удаление.
В старых версиях Git, "git add <path>" используется для игнорирования удаления.

Вы можете сказать "git add --ignore-removal <path>", чтобы добавьте только добавленные или измененные пути в <path>, если вы действительно этого хотите.


Предупреждение (git1.8.3 Апрель 2013, для предстоящего git2.0).
Я изменил свой ответ, чтобы сказать git add -u . вместо git add -u.:

git add -u будет работать со всем деревом в git 2.0 для согласованности с "git commit -a" и другими командами.
Потому что не будет механизма, чтобы "git add -u" вел себя как "git add -u .", важно для тех, кто привык к "git add -u" (без pathspec), обновляя индекс только для путей в текущем подкаталоге, чтобы начать тренировать свои пальцы, чтобы явно сказать "git add -u .", когда они имеют в виду это до появления git 2.0.

Как я уже говорил в e "

Ответ 2

Как и в руководстве: git add . добавит все файлы в ваш текущий каталог, а git add -u . добавит только те, которые уже отслеживаются.

Ответ 3

git добавить documentaiton

git add . 

добавить все файлы из текущего каталога

git add -u 

только отслеживаемые файлы обновлений.