Яка різниця між `git add .` та` git add -u`?


75

Я припускав, що обидва працюють однаково. Обидва файли додають кожен файл до індексу. Але я, здається, помиляюся.

  • Яка різниця між git add .та git add -u?

Відповіді:


77

Це один із git gotchas, згаданих тут (до 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.

Як я вже згадував у " е "


5
Дякую за вашу відповідь та приклад. "Гей!" рядок мені дійсно допомагає.
ТЗ.

@TK: так, Benjol ( stackoverflow.com/users/11410/benjol)'s приклад хороший.
VonC

Здається, нам не потрібно ставити .(pathspec) з Git 2.x. Це працює знайти, коли я тестував.
Sanghyun Lee

Крім того, з Git 2.0 git add .додає всі зміни до індексу, оскільки -Aпараметр є типовим. Перевірте цей відповідь stackoverflow.com/a/26343584/524588
Sanghyun Лі

@Sangdol Дякуємо за це нагадування. Відповідь я оновив відповідно.
VonC

23

Як в інструкції сказано: git add . додасть усі файли в поточному каталозі, тоді як git add -u .додасть лише ті, які вже відстежуються.


10
add -uтакож буде інсценувати видалення.
CB Bailey

лише в тому випадку, якщо видалений файл було відстежено;)
Бенджамін Баннір

add -u - це еквівалент коміту -a (у файлах, на яких він працює).
Лакшман Прасад

Баннір: Якщо видалений файл не відслідковувався, тоді все одно нічого не можна видалити з індексу?
CB Bailey

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.