middle
Что такое Conventional Commits?
Conventional Commits — это спецификация для стандартизации формата коммит-сообщений, обеспечивающая единообразную историю, автоматическую генерацию changelog и определение следующей версии по типам коммитов.
Формат
Пример
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
Примеры:
Пример
feat(auth): add JWT token refresh endpoint
fix(payment): correct rounding error in tax calculation
refactor(user-service): extract validation logic to separate class
docs: update README with new build instructions
chore(deps): upgrade Spring Boot to 3.3.0
Типы (types)
| Тип | Назначение | Влияние на версию |
|---|---|---|
feat |
Новая функциональность | MINOR (1.x.0) |
fix |
Исправление бага | PATCH (1.0.x) |
docs |
Изменения в документации | – |
style |
Форматирование, без изменения логики | – |
refactor |
Рефакторинг (не fix и не feat) | – |
test |
Добавление/исправление тестов | – |
chore |
Сборка, CI, зависимости | – |
perf |
Улучшение производительности | PATCH |
ci |
Изменения в CI/CD конфигурации | – |
build |
Изменения в системе сборки | – |
revert |
Откат предыдущего коммита | – |
Breaking Changes
Несовместимые изменения обозначаются двумя способами:
Пример
# Способ 1: восклицательный знак после типа
feat(api)!: change response format to JSON:API
# Способ 2: футер BREAKING CHANGE
feat(api): change response format
BREAKING CHANGE: response format changed from custom JSON to JSON:API.
All clients must update parsers.
Breaking change увеличивает MAJOR версию (x.0.0).
Связь с Semantic Versioning
Пример
fix: ... -> v1.0.1 (PATCH)
feat: ... -> v1.1.0 (MINOR)
feat!: ... -> v2.0.0 (MAJOR)
BREAKING CHANGE: ... -> v2.0.0 (MAJOR)
Автоматизация
Пример
# Установка commitlint (проверка формата)
npm install -g @commitlint/cli @commitlint/config-conventional
# Использование с Husky (git hooks)
npx husky add .husky/commit-msg 'npx commitlint --edit $1'
# Автогенерация changelog
npx conventional-changelog -p angular -i CHANGELOG.md -s
# Автоматический релиз с semantic-release
npx semantic-release
Ключевые моменты
- Conventional Commits — это спецификация, а не инструмент. Валидация выполняется через commitlint или git hooks
- Формат позволяет автоматически определять тип версии (MAJOR/MINOR/PATCH) на основе коммитов
scope— необязательный, обычно указывает модуль или область изменений- Body и footer отделяются от заголовка пустой строкой
Частые ошибки
- Писать описание с заглавной буквы — по конвенции начинается со строчной
- Ставить точку в конце заголовка — не ставится
- Превышать 72 символа в заголовке — затрудняет чтение в
git log - Использовать неправильный тип:
fixдля рефакторинга илиfeatдля исправления бага - Забывать про
BREAKING CHANGEпри несовместимых изменениях
Как используется в 2026
- Conventional Commits — стандарт де-факто в open-source и многих enterprise-проектах
semantic-releaseиrelease-pleaseавтоматически создают релизы, теги и changelog на основе коммитов- AI-ассистенты в IDE автоматически предлагают коммит-сообщения в формате Conventional Commits
- Интеграция с Jira/YouTrack: номер задачи в scope или footer автоматически связывает коммит с задачей
На собеседовании: покажите знание формата:
type(scope): description. Перечислите основные типы (feat, fix, docs, refactor, chore) и их влияние на версию. Ключевая связь: Conventional Commits + Semantic Versioning = автоматические релизы. Упомяните инструменты: commitlint, semantic-release, Husky.