November 29

Шпаргалка по Conventional Commits

Система Conventional Commits помогает писать единообразные коммиты, которые легко читать, анализировать и автоматически использовать в релизах.

Собрал базовые примеры использования, чтобы документация была всегда под рукой.

Основная идея

Каждый коммит должен отвечать на три простых вопроса:

  1. Что изменили? — тип (type)
  2. Где? — область (scope) — необязательно, но очень рекомендуется
  3. Зачем и что именно?» — короткое и понятное описание (subject)
<type>[optional scope]: <subject>
[optional body]
[optional footer]

1. Типы коммитов

  • feat (новый функкционал).
feat(auth): добавить refresh token механизм
  • fix (исправление ошибки, дефекта)
fix(profile): корректно сохранять изменения аватара
  • docs (изменения в документации)
docs(readme): обновить раздел по установке проекта
  • style(изменения, не влияющие на логику — форматирование, пробелы, точки с запятой.
style(ui): выровнять отступы в модальном окне
  • refactor (перереписывание кода без изменения поведения)
refactor(api): упростить структуру сервисов
  • perf(Оптимизация производительности)
perf(table): ускорить рендер на 20%
  • test (добавление или исправление тестов)
test(cart): покрыть логику пересчёта сумм
  • build(изменения в сборке, CI, зависимостях)
build: обновить Webpack до версии 5
  • chore(Прочие изменения, не затрагивающие код приложения)
chore: почистить скрипты в package.json


2. Scope

Всегда, когда это помогает локализовать изменение. Хорошие примеры областей:

  • auth
  • live
  • ui
  • api

Некорректные примеры:

  • misc
  • stuff
  • temp

3. Subject

Короткий принцип:

  • Пишем в повелительном наклонении, как будто даём команду коду.
  • Не ставим точку в конце.
  • Максимум ясности, минимум слов.
  • Если в команде принято соглашении о привязке задач к коммитам, можно указать номер задачи

Примеры хороших subject:

  • перенести логику в сервис
  • добавить debounce при вводе
  • исправить ошибку валидации номера

4. Body

Используем только если нужно объяснение:

  • почему так сделано;
  • какие альтернативы рассматривались;
  • есть ли побочные эффекты.
refactor(order): вынести расчет скидки в отдельный модуль
Чтобы упростить дальнейшую поддержку и подготовить почву для многоуровневой системы скидок.


5. Footer

Closes #123

BREAKING CHANGE:

Если коммит ломает обратную совместимость, обязательно указываем:

feat(api): изменить структуру ответа метода /users

BREAKING CHANGE: метод возвращает объект вместо массива