linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
Intro
Lessons
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Главы
  • How it works
  • Уроки
  • База знаний
  • Собеседование
home/git/kb/Ежедневная работа/conventional-commits

kb/workflow ── Ежедневная работа ── intermediate

Conventional Commits

Формат сообщения коммита `<type>(<scope>): <subject>`. Позволяет автоматически собирать changelog и выбирать semver-уровень при релизе. Стандарт от 2018, поддерживается большинством release-инструментов.

view as markdownaka: conventional, commit-convention

Conventional Commits - спецификация формата commit-сообщений (conventionalcommits.org, выросла из Angular commit convention, публичный 1.0.0 в 2018). Не путать со стилем «50/72 + повелительное наклонение» Tim Pope - это про структуру строки, а не про длину и тон. Префикс заголовка по типу изменения делает историю машино-читаемой: changelog и semver-bump можно сгенерировать автоматически.

Формат

<type>(<scope>): <subject>
[optional body]
[optional footer]
  • type - обязательный. Категория изменения.
  • scope - опциональный. Модуль или подсистема.
  • subject - короткое описание, повелительное наклонение, ≤ 50 символов с учётом префикса.
  • body - детали, на 72 колонки.
  • footer - ссылки на тикеты, BREAKING CHANGE:, Co-authored-by:.

Типы

  • feat - новая фича для пользователя
  • fix - баг-фикс
  • docs - только документация
  • style - форматирование, whitespace
  • refactor - изменение кода без новой фичи и без фикса
  • perf - улучшение производительности
  • test - добавление/исправление тестов
  • chore - обслуживание (deps, конфиги)
  • build, ci - инфраструктура сборки
  • revert - отмена другого коммита

Список не закрытый - команды добавляют свои (security, i18n), главное - фиксировать в документации проекта.

Примеры

feat(auth): add password reset flow
fix(api): handle null in user.profile
docs(readme): document SSL setup
chore(deps): bump react to 18.3.1
refactor!: drop support for Node 16

Ломающие изменения

Два варианта пометки:

1. ! после типа:

refactor(api)!: rename POST /user to POST /users

2. BREAKING CHANGE: в футере:

feat(api): rename POST /user to POST /users
BREAKING CHANGE: endpoint /user no longer exists,
use plural /users.

Можно совмещать - ! для краткости, BREAKING CHANGE: для подробного объяснения миграции.

Зачем

Главные две причины:

  1. Автоматический changelog. Инструменты вроде standard-version, release-please, semantic-release парсят историю, группируют по типам, генерируют CHANGELOG.md.
  2. Автоматический semver. fix: → patch, feat: → minor, BREAKING CHANGE: → major. Связь с semver.

Без процесса автоматического релиза формат добавляет только обсуждение в команде. Если CHANGELOG ведёшь руками - можно жить без префиксов, ничего не пострадает.

Подводные камни

  • Не путать style и feat. style: reformat code - это только whitespace/индентация. feat: change button colors - это видимое пользователю изменение, даже если технически только CSS.
    • scope не обязателен. Если проект маленький - можно без него. Если большой - обязателен, иначе истории нечитаемые.
  • Tools (pre-commit hook commitlint) проверяют формат и блокируют коммит с нарушением. Полезно как страховка.

§ команды

bash
git commit -m "feat(auth): add password reset"

Простой Conventional Commit

bash
git commit -m "fix: handle null" -m "" -m "BREAKING CHANGE: removed deprecated API"

Несколько -m создают тело с разделением пустыми строками

bash
npx commitlint --from HEAD~5

Проверить последние 5 коммитов на соответствие Conventional Commits

§ см. также

  • commit-cmdgit commitФиксирует то, что лежит в индексе, как новый коммит-объект и передвигает текущую ветку на этот коммит. Без аргументов открывает редактор для сообщения; чаще всего вызывают с `-m`.
  • semverСемантическое версионирование (SemVer)Конвенция версионирования `MAJOR.MINOR.PATCH`. PATCH - обратно- совместимые баг-фиксы, MINOR - новая совместимая функциональность, MAJOR - ломающие изменения. Принят большинством библиотек.
  • atomic-commitАтомарный коммитКоммит, который делает одну логически целостную правку. Каждый атомарный коммит можно безопасно revert'нуть, на каждом сборка и тесты проходят. Основа здоровой истории Git.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки