git add: положить изменения в индекс

Обновлено 31 июля 2026 г.

git add переносит изменения из рабочего каталога в индекс (staging area) - в набор, который целиком попадёт в следующий коммит.

Сам по себе git add ничего не сохраняет навсегда. Он отбирает: вот эти правки я готов зафиксировать, остальное пока полежит. Сохраняет уже git commit.

$ git add recipe.txt                 # один файл
$ git add recipe.txt steps.txt       # несколько за раз
$ git add notes/                     # весь каталог

Проверить результат можно через git status: отобранное соберётся под заголовком Changes to be committed.

$ git status
On branch main
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	new file:   steps.txt

Обратный ход подсказан в скобках. git restore --staged steps.txt вынимает файл из индекса, не трогая ни одной строки внутри него.

git add . и чем он опасен

Точка значит «всё, что изменилось в текущем каталоге и ниже». Команда экономит время, и она же приносит в историю то, чего там быть не должно: черновики, случайно сохранённый пароль, дамп базы на гигабайт, каталог с зависимостями на сто тысяч файлов.

Привычка простая: после git add . посмотри git status и прочитай список глазами. Мусор, который не нужен в репозитории никогда, лучше вписать в .gitignore - тогда git перестанет его замечать вовсе.

Выборочное добавление кусками

Если в одном файле лежат правки от двух разных задач, git add -p предложит их по частям:

$ git add -p recipe.txt
@@ -1,2 +1,3 @@
 line1
 line2
+milk
(1/1) Stage this hunk [y,n,q,a,d,e,p,?]?

y - взять этот кусок, n - пропустить, q - выйти, ? - показать, что значат остальные буквы. Когда кусок большой, появляется ещё s, он режет его на части помельче. Так из одного файла получаются два осмысленных коммита вместо одной свалки.

Частые ошибки

Правка, сделанная после git add, в индекс не попадает. Индекс хранит содержимое файла на момент команды, поэтому файл может стоять в выводе git status дважды: и в Changes to be committed, и в Changes not staged for commit. Лечится повторным git add.

Второе: git add не откатывает и не удаляет ничего в рабочем каталоге. Он только копирует состояние файла в индекс.

Где это в учебнике

Тема разобрана здесь: Глава 3. Три зоны и первый коммит.

Потренироваться руками - в интерактивном уроке Три зоны и коммит.