git add
Добавить содержимое рабочего дерева в индекс (staging area) для последующего коммита
Описание
git add переносит изменения из рабочего дерева в индекс (также называемый staging area или кэшем). Индекс — это промежуточная область между рабочим деревом и историей коммитов. Команда git commit фиксирует именно то, что находится в индексе, а не все изменения на диске.
Такая двухступенчатая модель (рабочее дерево → индекс → коммит) даёт гибкость: можно изменить десяток файлов, но зафиксировать только часть из них в одном логичном коммите, а остальное — позже. Это позволяет создавать чистую, осмысленную историю даже при хаотичном процессе разработки.
git add не только добавляет новые файлы — она также фиксирует изменения в уже отслеживаемых файлах и помечает разрешённые конфликты при слиянии. Чтобы убрать файл из индекса (не удаляя с диска), используйте git restore --staged или git reset HEAD.
Синтаксис
- <путь> — файл, директория или glob-паттерн. При указании директории рекурсивно добавляются все файлы внутри.
- -- — разделитель: то, что после него, трактуется как путь, а не флаг (полезно для файлов с именем вроде
-f).
Флаги и опции
| Флаг | Описание |
|---|---|
-A / --all | Добавить все изменения: новые файлы, изменённые и удалённые. Обрабатывает всё рабочее дерево репозитория, а не только текущую директорию. |
-p / --patch | Интерактивно выбирать отдельные «куски» (hunks) изменений для добавления в индекс. Позволяет закоммитить часть изменений в одном файле. |
-i / --interactive | Запустить интерактивный режим с меню. Предлагает действия: status, update, revert, add untracked, patch и др. |
-n / --dry-run | Показать, что будет добавлено, без реального добавления. Полезно для проверки glob-паттернов. |
-u / --update | Добавить только изменения в уже отслеживаемых файлах (не добавлять новые untracked файлы). |
-f / --force | Принудительно добавить файлы, даже если они игнорируются через .gitignore. |
-v / --verbose | Подробный вывод — показывать каждый добавленный файл. |
-e / --edit | Открыть diff в редакторе и добавить только выбранные строки вручную. Редактируется прямо patch-файл. |
--chmod=(+|-)x | Установить или снять бит исполнения для добавляемых файлов (не меняет файл на диске, только в индексе). |
--ignore-errors | Продолжить добавление других файлов, если при добавлении одного возникла ошибка индексирования. |
Паттерны использования
Атомарный коммит — добавляем только нужное
# Изменили 3 файла, но коммитим только 2 git add src/auth.py src/models/user.py git commit -m "feat(auth): add JWT token validation" # Оставшийся файл — в следующий коммит git add src/views/profile.py git commit -m "feat(profile): update profile page"
Частичное добавление файла (patch mode)
# Добавить только часть изменений в файле git add -p src/utils.py # Git покажет каждый hunk: # Stage this hunk [y,n,q,a,d,s,?]? # y - добавить, n - пропустить, s - разбить
Добавить все изменения одной командой
# Добавить всё в текущей директории git add . # Добавить всё в репозитории (включая удалённые) git add -A # Только изменённые отслеживаемые файлы git add -u
Проверить перед добавлением
# Посмотреть что будет добавлено git add -n . # или просмотреть изменения сначала git diff git status # Добавить и проверить результат git add src/ git status
Принудительно добавить игнорируемый файл
# Например, добавить .env.example в репозиторий, # несмотря на .gitignore git add -f .env.example git commit -m "docs: add .env.example template"
Убрать файл из staging area
# Случайно добавили — откатить из индекса git restore --staged secret.txt # Альтернатива (старый синтаксис) git reset HEAD secret.txt # Убрать всё из индекса git restore --staged .
Советы и подводные камни
Флаг
-p (patch) — один из самых полезных в Git. Он позволяет разбить большой блок изменений на несколько логичных коммитов. Это делает историю читаемой для коллег и упрощает git bisect. Нажмите ? в интерактивном режиме для справки по клавишам.
В Git 2.x оба варианта ведут себя одинаково — добавляют всё рабочее дерево. В старых версиях
git add . не удалял файлы из индекса, а -A удалял. Если работаете в команде с разными версиями Git — используйте -A для предсказуемости.
Команда
git add . удобна, но опасна: можно случайно добавить .env, ключи API, пароли. Всегда проверяйте git status перед коммитом. Настройте .gitignore заранее. Если секрет уже закоммичен — используйте git filter-branch или git-filter-repo для очистки истории.