Как написать хороший commit message для понятной истории изменений в коде

Зачем вообще заморачиваться с commit message?

Как написать хороший commit message - иллюстрация

Если вы когда-либо открывали историю коммитов и видели такие сообщения, как “fix”, “stuff” или “final version”, вы знаете, насколько это бесполезно. Хороший commit message — это не просто вежливость для вашей команды, это мощный инструмент понимания истории проекта. Он позволяет быстро разобраться, что и зачем было сделано, особенно когда проект растягивается на месяцы, а участников становится всё больше. Важно не просто зафиксировать изменения, а донести до будущего читателя (в том числе — до себя самого через полгода), почему вы внесли эти правки. Поэтому, если вы задаётесь вопросом, как написать хороший commit message, начните с понимания, для кого вы это делаете.

Необходимые инструменты для работы с коммитами

Вам не нужно ничего сверхъестественного — основные инструменты уже есть в любом Git-проекте. Главное — это:

- Git (установленный на компьютере). Можно использовать как через командную строку, так и через графические клиенты (например, GitKraken, SourceTree или встроенные инструменты в VS Code).
- Текстовый редактор, чтобы удобно оформлять многострочные сообщения.
- Хуки pre-commit (по желанию), чтобы автоматически проверять соответствие commit message определённым стандартам.

Если вы работаете в команде, где важна единообразная структура сообщения коммита, стоит установить линтеры вроде commitlint и настроить conventional commits. Это поможет избежать распространённых ошибок в commit message, таких как отсутствие описания или неинформативные заголовки.

Структура сообщения коммита

Структура commit message может различаться в зависимости от стиля, принятого в вашей команде. Однако есть общепринятая и очень удобная форма, которой придерживаются даже крупные open source проекты, такие как Angular или React:

- Заголовок (50 символов или меньше) — краткое описание внесённого изменения.
- Пустая строка
- Основной текст (опционально) — более подробное пояснение, если требуется.
- Footer (опционально) — ссылки на задачи из трекера, пояснение breaking changes и т.п.

Пример:
```
feat: добавлена авторизация по OAuth2

Теперь пользователи могут входить с помощью Google и GitHub.
Добавлен новый middleware для обработки токенов.

Closes #42
```

Как можно заметить, примеры хороших commit message всегда конкретны, лаконичны и дают понимание сути изменений.

Пошаговый процесс написания коммита

Как написать хороший commit message - иллюстрация

Чтобы писать осмысленные коммиты, придерживайтесь следующей последовательности:

1. Сначала подумайте, что именно вы изменили. Это может быть исправление бага, добавление новой функции, изменение документации и т.д.
2. Сформулируйте краткий заголовок. Он должен отвечать на вопрос: «Что делает этот коммит?» и быть в повелительном наклонении — например, "Исправить падение при пустом вводе".
3. Добавьте подробности, если нужно. Если в коммите много изменений, особенно нестандартных, поясните логику решения.
4. Ссылайтесь на задачу, если она есть. Это поможет связать код с управлением проектом.

Вот как это может выглядеть:
```
fix: устранена ошибка при сохранении настроек

Причина была в отсутствии проверки на null у свойства config.user.
Теперь добавлена валидация перед сохранением.

Ref: TASK-123
```

Рекомендации для commit message от профессиональных разработчиков

Многие эксперты сходятся во мнении, что дисциплина в коммитах — залог здорового проекта. Вот несколько советов, которые помогут не скатиться в “wip” и “update”:

- Пишите заголовки как команды. Вместо “исправлена ошибка” — “исправить ошибку при загрузке профиля”.
- Не коммитьте всё сразу. Делите изменения на логические блоки и коммитьте каждый отдельно.
- Избегайте общих слов. “Обновление зависимостей” — это не commit message, это крик отчаяния. Лучше указать, какие именно зависимости обновлены и зачем.

Типичные ошибки в commit message

Нельзя забывать и про типичные ошибки в commit message, которые часто допускают как новички, так и опытные разработчики:

- Слишком общее описание: “fixed bug”, “update code” — неинформативно.
- Отсутствие заголовка или деталей: особенно вредно, если изменения критичны.
- Использование слишком длинного заголовка: старайтесь укладываться в 50 символов.
- Смешивание нескольких изменений в одном коммите: усложняет откат и анализ.

Чтобы этого избежать, придерживайтесь принципа atomic commits — каждый коммит должен быть законченным и логически цельным.

Что делать, если коммит уже сделан неправильно?

Как написать хороший commit message - иллюстрация

Бывает, что вы уже сделали коммит, а потом поняли, что допустили одну из вышеописанных ошибок. Не беда, Git позволяет это легко исправить:

- Если коммит последний и вы ещё не отправили его в удалённый репозиторий — используйте `git commit --amend`.
- Если коммитов много или они уже улетели в remote, потребуется `git rebase -i`, но будьте осторожны — это затрагивает историю и может привести к конфликтам.

Также полезно настроить pre-commit хуки или линтер commit message, чтобы Git сам подсказывал, где вы ошиблись. Это особенно актуально в больших командах, где важно соблюдать единый стиль и не плодить хаос в истории проекта.

Вывод

Умение писать хорошие commit messages — это навык, который приходит с опытом, но его легко прокачать, следуя простым правилам. Понимание структуры сообщения коммита, избегание ошибок и следование рекомендациям для commit message существенно улучшают читаемость истории проекта. Не забывайте: каждый коммит — это ваша визитная карточка в команде и отражение того, насколько вы уважаете своих коллег и будущего себя.

Прокрутить вверх