Conventional Commits: Как писать понятные сообщения коммитов в Git

Каждый разработчик сталкивался с хаотичными сообщениями коммитов в Git: «fix», «update stuff», «работает». Через месяц понять, что именно менялось в коде, становится невозможно. Стандарт Conventional Commits решает эту проблему раз и навсегда.

Что такое Conventional Commits?

Conventional Commits — это соглашение о написании сообщений коммитов, которое делает историю проекта понятной для людей и машин. Основано на стандарте SemVer и используется крупными проектами: Angular, Vue.js, React.

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

<тип>[область]: <описание>

[тело сообщения]

[подвал]

Обязательные части:

  • тип — категория изменений
  • описание — краткое описание изменений

Опциональные части:

  • область — часть кодовой базы
  • тело — детальное описание
  • подвал — breaking changes, ссылки на issues

Основные типы коммитов

feat — новая функциональность

feat: добавил форму обратной связи
feat(auth): реализовал авторизацию через Google

fix — исправление багов

fix: устранена утечка памяти в загрузчике
fix(header): исправлено позиционирование меню на мобильных

docs — документация

docs: обновил README с инструкциями по установке
docs(api): добавлены примеры использования REST API

style — форматирование кода

style: исправил отступы в components/Button
style(css): приведены к единому стилю селекторы

refactor — рефакторинг

refactor: выделена логика валидации в отдельный модуль
refactor(utils): упростил функцию форматирования дат

perf — оптимизация производительности

perf: кэшированы результаты API запросов
perf(images): оптимизированы размер изображений

test — тесты

test: добавить unit тесты для компонента Cart
test(integration): покрыты тестами процесс оплаты

ci — CI/CD изменения

ci: настроил автоматический деплой через GitHub Actions
ci(docker): обновил Node.js до версии 18

Дополнительные типы

build — система сборки

build: обновил webpack до версии 5
build(npm): добавил script для production сборки

chore — рутинные задачи

chore: обновил зависимости
chore(git): добавил .gitignore для node_modules

revert — откат изменений

revert: откатил "feat: добавитл новый API endpoint"

Breaking Changes

Для изменений, нарушающих обратную совместимость:

feat!: изменил структуру API ответов

BREAKING CHANGE: поле 'data' переименовано в 'payload'

Преимущества стандарта

Для команды

  • Понятная история — любой разработчик поймет изменения
  • Быстрый поиск — легко найти конкретный тип изменений
  • Code review — проще анализировать pull requests

Для автоматизации

  • Семантическое версионирование — автоматический bump версий
  • Генерация changelog — красивые release notes
  • CI/CD триггеры — запуск деплоя только при feat/fix

Инструменты для автоматизации

Commitizen

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

❌ Неправильно

git commit -m "fix"
git commit -m "Update header.php"
git commit -m "Добавил новую фичу в корзину"

✅ Правильно

git commit -m "fix(header): устранил переполнение контента"
git commit -m "feat(cart): добавил быстрое оформление заказа"
git commit -m "docs: обновил инструкцию по развертыванию"

Советы по внедрению

Для команды

  1. Начните с простого — используйте основные типы
  2. Договоритесь об областях — frontend, backend, api, docs
  3. Добавьте линтер — автоматизируйте проверку
  4. Проводите ретро — обсуждайте улучшения процесса

Для личных проектов

  1. Выработайте привычку — используйте commitizen
  2. Ведите changelog — автоматизируйте через standard-version
  3. Тегируйте релизы — связывайте версии с коммитами

Заключение

Conventional Commits превращает хаос в истории Git в понятную документацию изменений. Это инвестиция времени, которая окупается на первой же неделе использования.

Начните с базовых типов featfixdocs — и постепенно внедряйте остальные. Ваша команда (и будущий вы) скажет спасибо.


Полезные ссылки:

© «Code==Poetry», 2025