↓Перейти к содержанию
  1. Git: руководства и команды/

Коммит в Git: что это простыми словами

·5 минут·

Коммит (commit) — это фундаментальное понятие в Git и контроле версий. Для новичка слово может звучать странно, но за ним прячется простая идея: коммит — это снимок состояния твоего проекта в конкретный момент времени, сохранённый вместе с описанием изменений. Разберём это подробно, с примерами и аналогиями.

Коммит — это снимок состояния проекта #

Представь, что ты работаешь над программой. Ты добавил новую функцию, протестировал — всё работает. Вот этот момент «всё работает» стоит зафиксировать. Коммит — это именно такая фиксация.

Аналогия из видеоигр: коммит — это сохранение игры в контрольной точке. Прошёл уровень — сохранился (сделал коммит). Если дальше что-то пошло не так, можно вернуться к сохранённому состоянию.

Другая аналогия: если твой проект — это видеофильм, то коммит — это отдельный кадр. Вся история разработки — серия таких кадров, показывающих эволюцию проекта от первой строчки кода до текущего момента.

Из чего состоит коммит #

Каждый коммит — это не просто «сохранение файлов». Он содержит полный набор метаданных:

Снимок файлов — состояние всех отслеживаемых файлов на момент коммита. Git не хранит дельты (различия) — он хранит полные снимки, но оптимизирует хранение через ссылки на неизменённые файлы.

Сообщение коммита — текст, который ты пишешь сам. Описывает что изменилось и почему.

Автор — имя и email разработчика, который создал коммит.

Временная метка — дата и время создания коммита.

Хеш — уникальный 40-символьный SHA-1 идентификатор вида a3f5b2d7.... По нему коммит можно найти в любое время.

Ссылка на родителя — указатель на предыдущий коммит. Именно это связывает коммиты в цепочку истории.

Вот как выглядит коммит в терминале:

$ git show HEAD --stat

commit 3a8f2c1b4e9d7a5f6c2e1b0a3d4e5f6a7b8c9d0e
Author: Иван Петров <[email protected]>
Date:   Mon Mar 10 14:30:00 2026 +0300

    Добавлена функция авторизации через OAuth

    - Интеграция с Google OAuth 2.0
    - Добавлена модель UserToken
    - Тесты в tests/test_auth.py

 src/auth.py          | 85 ++++++++++++++++++++++++++++++++++++
 src/models.py        | 23 ++++++++++
 tests/test_auth.py   | 41 ++++++++++++++++++
 3 files changed, 149 insertions(+)

Почему сообщение коммита важно #

Сообщение коммита — это письмо себе и коллегам из будущего. Через полгода ты откроешь историю и поймёшь, что и зачем было сделано, только если писал нормальные сообщения.

Плохие сообщения коммитов:

git commit -m "обновление"
git commit -m "фиксы"
git commit -m "работа"
git commit -m "ааааа"

Хорошие сообщения коммитов:

git commit -m "Исправлена ошибка при загрузке файла размером > 100 МБ"
git commit -m "Добавлена валидация email в форме регистрации"
git commit -m "Оптимизированы индексы таблицы users, запросы ускорились в 3 раза"

Хорошее сообщение отвечает на вопрос: что изменилось и почему? Не «как» (это видно из кода), а «что» и «зачем».

Как создать коммит #

Создание коммита — двухшаговый процесс:

Шаг 1: подготовить изменения через git add

# Добавить один файл
git add src/auth.py

# Добавить несколько файлов
git add src/auth.py src/models.py

# Добавить все изменённые файлы
git add .

# Добавить только изменения в уже отслеживаемых файлах (без новых файлов)
git add -u

Шаг 2: зафиксировать снимок через git commit

# Создать коммит с коротким сообщением
git commit -m "Исправлена ошибка авторизации"

# Создать коммит с многострочным сообщением (откроет редактор)
git commit

# Добавить изменения и сразу создать коммит (только для уже отслеживаемых файлов)
git commit -am "Небольшие правки в логике авторизации"

Визуально процесс выглядит так:

Рабочая директория    →    Индекс         →    Репозиторий
(редактируешь файлы)   (git add)          (git commit)

История как цепочка коммитов #

Каждый коммит знает своего «родителя» — предыдущий коммит. Так образуется цепочка:

A ← B ← C ← D ← E (HEAD, main)

A = первый коммит ("Initial commit")
B = добавлена авторизация
C = исправлена ошибка
D = добавлена документация
E = текущее состояние

По этой цепочке можно перемещаться в обе стороны: вперёд (смотреть как развивался проект) и назад (восстанавливать прошлые состояния).

Просмотр коммитов #

# Полная история коммитов
git log

# Компактный вид: хеш + сообщение
git log --oneline

# Компактный вид с графом веток
git log --oneline --graph --all

# Последние 5 коммитов
git log -5

# История конкретного файла
git log -- src/auth.py

# Детали конкретного коммита
git show 3a8f2c1

# Посмотреть что изменилось в последнем коммите
git show HEAD

Атомарные коммиты #

Хороший коммит — атомарный. Это значит: один коммит = одно логическое изменение. Не нужно в одном коммите мешать исправление бага, добавление фичи и рефакторинг — это усложняет понимание истории и затрудняет откат.

Хорошая последовательность:

1. "Исправлена ошибка в валидации телефона"
2. "Добавлена функция отправки SMS"
3. "Обновлена документация по API"

Плохая последовательность:

1. "Много изменений" (исправлен баг + новая фича + рефакторинг + обновление зависимостей)

Коммиты и командная работа #

В команде каждый разработчик создаёт свои коммиты. Git отслеживает кто что изменил. Все коммиты объединяются в общую историю. Это даёт прозрачность: любое изменение имеет автора, дату и обоснование.

Если что-то сломалось после определённого коммита — git bisect поможет найти виновный коммит за несколько шагов, даже в истории из тысяч коммитов.

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

Коммит с пустым сообщением. Git не позволяет создать коммит без сообщения. Если не придумал — напиши хотя бы что изменилось технически. Хорошее сообщение окупится через месяц.

Один огромный коммит «всё сразу». Если ты неделю работал и сделал один коммит — история бесполезна. Лучше делать коммиты чаще, после каждого логического шага.

Коммит незаконченной работы. Не коммить код, который не компилируется или ломает тесты. Коммит — это рабочее состояние. Для незаконченной работы используй ветки или git stash.


Часто задаваемые вопросы #

В чём разница между коммитом и сохранением файла? #

Сохранение файла (Ctrl+S) обновляет содержимое файла на диске. Коммит создаёт снимок всего проекта в Git с описанием изменений и сохраняет его в историю навсегда. Это принципиально разные вещи.

Как часто нужно делать коммиты? #

После каждого завершённого логического шага. Это может быть несколько коммитов в час или один в день — зависит от задачи. Ориентир: если ты можешь описать изменение одним предложением — самое время коммитить.

Можно ли отменить коммит? #

Да. Есть несколько способов: git revert <hash> создаёт новый коммит, который отменяет изменения (безопасно для общей ветки), git reset удаляет коммиты из истории (только для локальной ветки). Подробнее об отмене читай в статье про git reset.

Что будет, если коммит содержит ошибку? #

Создай новый коммит с исправлением. История сохранит оба коммита — это нормально. Если хочешь исправить последний коммит, не публикуя его, используй git commit --amend.

Нужны ли коммиты если работаешь один? #

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


Читай также #