git add - самая частая команда в Git после git status. Она
отвечает за переход «правки на диске» → «правки готовые к коммиту».
Что делает под капотом
Для каждого файла:
- Считывает содержимое из рабочего дерева.
- Создаёт blob-объект в
.git/objects/. - Обновляет запись в
.git/index: путь, права, SHA blob'а.
После этого git status покажет файл в разделе «Changes to be
committed».
Базовые формы
git add file.txt # один файл
git add src/ # директория рекурсивно
git add . # всё из текущей папки
git add -A # все изменения по всему репозиторию
git add '*.py' # по маске
Разница между . и -A: точка добавляет только из текущей рабочей
директории, -A смотрит на весь репозиторий вне зависимости от
того, где ты находишься.
Интерактивный режим
git add -p file.txt
Разбивает правку на hunk'и (куски ±3 строки контекста) и спрашивает
по каждому: y - добавить, n - пропустить, s - разбить на
более мелкие, e - отредактировать вручную. Это главный инструмент
для разделения одного файла с двумя разными изменениями на два
коммита.
Подводные камни
git add file.txtпишет в индекс текущее содержимое. Если послеaddещё раз отредактировать файл - в индексе останется старая версия.git statusпокажет файл и в «to be committed», и в «not staged». Чтобы догнать - повторитьgit add.- Новые файлы по умолчанию не отслеживаются. Их видно как untracked, пока их явно не добавить. Регистрация автоматическая отсутствует - это сделано намеренно, чтобы случайные файлы (логи, билд-артефакты) не попадали в индекс.