Наименование коммитов по стандарту Conventional Commits

Git — это популярная система контроля версий, которая позволяет разработчикам отслеживать изменения в коде и управлять историей проекта. Одним из ключевых аспектов работы с Git является создание коммитов. Правильное оформление коммитов помогает улучшить читаемость истории проекта, облегчает понимание изменений и упрощает совместную работу. В этой статье мы рассмотрим, как правильно делать коммиты в Git, с особым акцентом на структуру сообщений и типы изменений.

Чем хорош Conventional Commits

Помимо Conventional Commits, существует множество вариантов оформления коммитов, например, Gitmoji — используются информативные эмодзи.

Скриншот с GitHub на котором видно,  что все описания коммитов начинаются с эмодзи: стрелки, люди и т.д.
Стандарт Gitmoji предполагает использовать в описаниях эмодзи (маленькие картинки)

Хотя использование эмодзи является интересным вариантом, я предпочитаю Conventional Commits по следующим причинам:

  • Информативность.
  • Понятность.
  • Простота.
  • Популярность.
  • Наличие подробной спецификации с примерами и ответами на вопросы.

Conventional Commits — это способ писать сообщения о том, что мы изменили в коде, так, чтобы они были понятными и простыми. Это помогает всем в команде быстро понимать, что было сделано, и автоматически создавать списки изменений. Такой подход делает работу над проектом легче и лучше.

Структура коммита

Согласно документации, сообщение о коммите должно быть структурировано следующим образом:

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Сосредоточимся только на обязательных частях, которых всего две:

  1. type — тип изменения;
  2. description — краткое описание.

Общие рекомендации по написанию сообщений коммитов

  • Используйте повелительное наклонение: формулируйте сообщения как команды, например, «добавить», «исправить», «удалить».
  • Будьте краткими, но информативными: сообщения должны быть понятными и конкретными, избегайте излишней общей информации.
  • Избегайте использования «я»: например, вместо «я добавил» пишите «добавить».
  • Следуйте единому стилю: если в команде уже принят определенный стиль сообщений, следуйте ему для единообразия.

Тип изменения (type) и краткое описание (description)

Тип изменения (feat, fix и т.д.) — это первая часть сообщения коммита, которая помогает быстро понять, какое именно изменение было внесено.

Краткое описание должно быть лаконичным и четким, обычно не превышает 50 символов. Оно должно начинаться с маленькой буквы и описывать суть изменений.

Ниже перечислены основные типы и приведены примеры с кратким описанием.

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

feat — сообщает о добавлении нового функционала. Это может быть новая функция или улучшение существующей функциональности.

git commit -m 'feat: добавить функцию поиска по пользователям'
git commit -m 'feat: интегрировать API для получения данных о погоде'
git commit -m 'feat: создать компонент для отображения карточек товаров'

fix — используется для обозначения исправления ошибок. Это включает в себя любые изменения, которые устраняют баги.

git commit -m 'fix: исправить ошибку 500 при запросе к /users'
git commit -m 'fix: устранить проблему с отображением кнопки Сохранить'
git commit -m 'fix: исправить сбой при входе с неправильным паролем'

docs — изменения в документации. Это может быть обновление README, добавление комментариев или улучшение документации API.

git commit -m 'docs: обновить документацию по установке'
git commit -m 'docs: исправить опечатки в README.md'
git commit -m 'docs: добавить лицензию проекта'

style — охватывает изменения, не влияющие на логику программы, такие как форматирование кода, пробелы или изменения в стиле.

git commit -m 'style: удалить лишние пробелы в коде'
git commit -m 'style: изменить шрифт заголовков для соответствия дизайну'
git commit -m 'style: добавить пробелы между функциями для улучшения читаемости'

refactor — подразумевает изменения в коде, которые не добавляют функциональности и не исправляют ошибки, но улучшают структуру или читаемость кода.

git commit -m 'refactor: переименовать переменные для лучшей читаемости'
git commit -m 'refactor: упростить функцию валидации формы'
git commit -m 'refactor: выделить общий код в отдельный метод'

perf — для изменений, которые улучшают производительность приложения.

git commit -m 'perf: уменьшить время загрузки страницы'
git commit -m 'perf: оптимизировать алгоритм сортировки'
git commit -m 'perf: кэшировать результаты API'

test — добавление или изменение тестов. Это может быть написание новых тестов или исправление существующих.

git commit -m 'test: добавить юнит-тесты для функции валидации'
git commit -m 'test: оптимизировать алгоритм сортировки'
git commit -m 'test: кэшировать результаты API'

build — относится к изменениям, касающимся системы сборки или внешних зависимостей (например, изменения в конфигурации Webpack, обновление библиотек и т.д.).

git commit -m 'build: обновить зависимости до новых версий'
git commit -m 'build: добавить плагин для минификации CSS'
git commit -m 'build: удалить устаревшие скрипты сборки'

ci — охватывает изменения в конфигурации CI/CD (непрерывной интеграции и доставки).

git commit -m 'ci: обновить конфигурацию Travis CI'
git commit -m 'ci: добавить этап сборки в конвейер CI'
git commit -m 'ci: исправить ошибки в конфигурации CircleCI'

chore — включает изменения, которые не попадают в другие категории, например, обновления задач, настроек и других мелочей.

git commit -m 'chore: очистить старые ветки в репозитории'
git commit -m 'chore: обновить ссылку на email'
git commit -m 'chore: добавить значок загрузки'

revert — используется для отмены предыдущего коммита. Это позволяет легко вернуть изменения, если они были ошибочными.

git commit -m 'revert: вернуть изменения в "docs: обновить документацию по API"'
git commit -m 'revert: отменить коммит "feat: добавить функцию аутентификации"'
git commit -m 'revert: вернуть изменения в "fix: исправить ошибку в функции расчета"'

Стандарт Conventional Commits используют многие крупные команды, например, разработчики популярного фреймворка Vue.js. Репозиторий доступен по адресу https://github.com/vuejs.

На скриншоте видно, что в коммитах указываются такие типы как feat, fix, docs, test, refactor, build, chore, ci.
Скриншот одной из страниц репозитория Vue.js на GitHub. Обратите внимания на то, что все коммиты начинаются с указания типа

Каждый тип коммита может быть дополнен дополнительной информацией, такой как область и описание, что помогает лучше понять суть изменений. Стандарт Conventional Commits способствует улучшению управления версиями и упрощает процесс работы с кодом.

Необязательные элементы: scope, body, footer(s)

  • scope (область видимости) — МОЖЕТ быть указана после типа. ДОЛЖНА состоять из существительного, описывающего раздел кодовой базы, заключённого в скобки, например, fix(parser).
  • body — после краткого описания МОЖЕТ быть добавлен более длинный текст коммита, содержащий дополнительную контекстную информацию об изменениях в коде. Текст коммита ДОЛЖЕН начинаться с пустой строки после описания.
  • footer — МОЖЕТ использоваться для добавления дополнительной информации. Обычно футер используется для указания ссылок на задачи или баги, связанные с коммитом, а также для указания о том, что данный коммит закрывает определенные задачи.

Ниже пример коммита с GitHub Angular:

refactor(docs-infra): complete removal of aio directory (#56496)

Finish removal of aio directory as it is no longer used or relied upon.

PR Close #56496

Видео от основателя JavaScript.ru Ильи Кантора

Очень важно, чтобы каждый коммит делал только одну вещь. Например, коммит исправляющий ошибку, или коммит добавляющий какой-то функционал. Это свойство называют атомарностью (atomic) и поэтому коммиты, как правило, небольшие. Реализовали что-то, посмотрели, убедились, что работает, добавили в индекс, закоммитили.

Заключение

Правильное оформление коммитов в Git — это важный аспект разработки, который помогает поддерживать чистоту и понятность истории изменений в проекте. Используя четкие типы изменений, лаконичные описания и дополнительную информацию, вы сделаете вашу работу более понятной для себя и других участников команды. Следуя рекомендациям выше, вы сможете значительно упростить процесс совместной работы и улучшить качество документации проекта.

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*