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. Три зоны и первый коммит.
Потренироваться руками - в интерактивном уроке Три зоны и коммит.