git basic

git add

Добавить содержимое рабочего дерева в индекс (staging area) для последующего коммита

Описание

git add переносит изменения из рабочего дерева в индекс (также называемый staging area или кэшем). Индекс — это промежуточная область между рабочим деревом и историей коммитов. Команда git commit фиксирует именно то, что находится в индексе, а не все изменения на диске.

Такая двухступенчатая модель (рабочее дерево → индекс → коммит) даёт гибкость: можно изменить десяток файлов, но зафиксировать только часть из них в одном логичном коммите, а остальное — позже. Это позволяет создавать чистую, осмысленную историю даже при хаотичном процессе разработки.

git add не только добавляет новые файлы — она также фиксирует изменения в уже отслеживаемых файлах и помечает разрешённые конфликты при слиянии. Чтобы убрать файл из индекса (не удаляя с диска), используйте git restore --staged или git reset HEAD.

Синтаксис

git add [ОПЦИИ] [--] <путь>…
# Добавить конкретный файл git add README.md # Добавить все изменения в текущей директории git add . # Добавить все файлы с определённым расширением git add "*.py" # Интерактивный выбор git add -i # Добавить отдельные части файла (hunks) git add -p src/app.py

Флаги и опции

ФлагОписание
-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 .

Советы и подводные камни

Совет: используйте git add -p для чистой истории
Флаг -p (patch) — один из самых полезных в Git. Он позволяет разбить большой блок изменений на несколько логичных коммитов. Это делает историю читаемой для коллег и упрощает git bisect. Нажмите ? в интерактивном режиме для справки по клавишам.
Совет: git add . vs git add -A
В Git 2.x оба варианта ведут себя одинаково — добавляют всё рабочее дерево. В старых версиях git add . не удалял файлы из индекса, а -A удалял. Если работаете в команде с разными версиями Git — используйте -A для предсказуемости.
Внимание: git add . добавляет всё, включая чувствительные данные
Команда git add . удобна, но опасна: можно случайно добавить .env, ключи API, пароли. Всегда проверяйте git status перед коммитом. Настройте .gitignore заранее. Если секрет уже закоммичен — используйте git filter-branch или git-filter-repo для очистки истории.