git commit и хорошие сообщения коммитов
Сохраняем изменения навсегда и учимся писать сообщения, за которые скажут спасибо.
Коммит — это снимок проекта в определённый момент с сообщением, описывающим, что и зачем изменилось.
Базовый коммит
Когда нужные изменения собраны в индексе, фиксируем их:
git commit -m "Добавить форму входа"Вывод:
[main a1b2c3d] Добавить форму входа 2 files changed, 18 insertions(+), 1 deletion(-)
Строка a1b2c3d — это сокращённый хеш коммита, его уникальный идентификатор. По нему вы сможете найти коммит в истории.
Полезные флаги
git commit -am "..."— добавить в индекс уже отслеживаемые изменённые файлы и сразу закоммитить (новые файлы так не добавятся).git commitбез-m— откроет редактор для развёрнутого сообщения.git commit --amend— изменить последний коммит (поправить сообщение или дозабросить файл). Не делайте этого с уже опубликованными коммитами.
Что делает сообщение хорошим
Сообщение коммита — это письмо вашему будущему «я» и коллегам. Через полгода именно по нему вы поймёте, зачем была сделана правка. Сложилась удобная конвенция:
- Первая строка — краткое резюме до ~50 символов, в повелительном наклонении: «Добавить...», «Исправить...», «Удалить...».
- Пустая строка, затем при необходимости подробное описание: что и главное почему.
- Объясняйте причину, а не пересказывайте диф. «Что» видно из кода, а «почему» — нет.
Плохо и хорошо
| Плохо | Хорошо |
fix | Исправить падение при пустом email |
изменения | Добавить валидацию формы регистрации |
asdf | Обновить зависимость requests до 2.32 |
Атомарные коммиты
Старайтесь, чтобы один коммит решал одну задачу. Не сваливайте в один коммит исправление бага, новую фичу и переименование переменных. Атомарные коммиты легче читать, ревьюить и при необходимости откатывать по одному.
Развёрнутое сообщение
Если правка нетривиальна, напишите тело коммита (откроется в редакторе при git commit без -m):
Исправить утечку памяти в обработчике загрузки
Файловые дескрипторы не закрывались при ошибке чтения,
из-за чего на больших файлах процесс падал. Добавлен
блок with, гарантирующий закрытие.Коммит — это точка возврата
Думайте о каждом коммите как о точке сохранения в игре. Пока изменения не закоммичены, они «висят в воздухе»: их легко случайно потерять. Закоммитив, вы получаете надёжную точку, к которой всегда можно вернуться. Поэтому коммитьте часто — как только сделали законченный осмысленный шаг. Маленькие частые коммиты гораздо удобнее одного гигантского в конце дня: их проще читать, откатывать и переносить.
Conventional Commits
Во многих командах принята договорённость о префиксах в сообщениях, которая называется Conventional Commits. Префикс показывает тип изменения:
feat:— новая функциональность;fix:— исправление бага;docs:— изменения в документации;refactor:— переработка кода без смены поведения.
Например: feat: добавить вход через Google. Такой формат позволяет автоматически строить списки изменений к релизам — но даже без него главное правило прежнее: пишите понятно.
Итог
- Коммит фиксирует содержимое индекса и получает уникальный хеш.
- Первая строка — краткое резюме в повелительном наклонении до ~50 символов.
- Объясняйте «почему», делайте атомарные коммиты по одной задаче.