git commit: зафиксировать снимок

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

git commit сохраняет то, что лежит в индексе, отдельным снимком: с автором, временем, твоим сообщением и уникальным хешем.

Коммит - это не «сохранить файл». Это состояние всего проекта на конкретный момент, точка в истории, к которой можно вернуться через год.

$ git commit -m "рецепт: первая версия"
[main (root-commit) 3d0ab22] рецепт: первая версия
 1 file changed, 2 insertions(+)
 create mode 100644 recipe.txt

Разбери вывод. main - ветка, на которой ты стоишь. root-commit появляется только у самого первого коммита репозитория, у него нет предыдущего. 3d0ab22 - сокращённый хеш, идентификатор снимка; по нему к этому состоянию проекта возвращаются. Дальше твоё сообщение и статистика: один файл, две добавленные строки. Последняя строка сообщает, что файл в истории новый.

Флаг -m задаёт сообщение прямо в командной строке. Без него git откроет редактор из настройки core.editor (см. git config). Если выйти из редактора, ничего не написав, коммита не будет:

Aborting commit due to empty commit message.

Что попадает в коммит

Только содержимое индекса, то есть то, что ты отобрал командой git add. Правки, сделанные после add, остаются снаружи. Неотслеживаемые и перечисленные в .gitignore файлы в снимок не идут вовсе.

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

Флаг -a: короткий путь

git commit -a сам добавляет в индекс все изменённые файлы, которые git уже отслеживает, и сразу коммитит их. Обычно пишут слитно с -m:

$ git commit -am "рецепт: сахар"
[main 2386e74] рецепт: сахар
 1 file changed, 2 insertions(+)

Новые файлы -a не берёт: они неотслеживаемые, и про них git ещё ничего не знает. После такой команды git status покажет их на прежнем месте:

$ git status -s
?? draft.txt

Удобно, когда правишь два-три знакомых файла. Плохо, когда изменений много и они про разное: в один снимок уедет всё подряд.

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

Сообщения «правки» и «фикс» через полгода не значат ничего. Пиши так, чтобы понять себя из будущего: что сделано и зачем.

Если коммитить нечего, git скажет об этом прямо и снимок не создаст:

$ git commit -m "нечего сохранять"
On branch main
nothing added to commit but untracked files present (use "git add" to track)

Опечатку в сообщении последнего коммита чинит git commit --amend, пока коммит не ушёл на сервер.

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

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

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