Короткий ответ
CHANGELOG.md — это человекочитаемый список изменений по версиям (новые функции, исправления багов, breaking changes), который помогает пользователям и команде понять, что изменилось в каждом релизе, не читая весь список коммитов.
Как это работает подробнее
при каждом релизе в changelog добавляется новая секция с номером версии и датой, сгруппированная по категориям (Added, Changed, Fixed, Removed — по соглашению Keep a Changelog). Записи пишутся на уровне пользователя/API, а не как сырые сообщения коммитов.
Пример кода
example.markdown
## [1.5.0] - 2024-03-10
### Added
- Экспорт отчётов в формате CSV.
### Fixed
- Исправлена ошибка округления суммы скидки при оформлении заказа.Что использовать на практике
- На практике. changelog особенно важен для библиотек и API с внешними потребителями — по нему решают, безопасно ли обновляться. Многие команды автоматизируют его генерацию на основе соглашений о сообщениях коммитов (Conventional Commits) и семантического релиз-тулинга (semantic-release и аналоги), чтобы не забывать обновлять файл вручную.
- Пример. Ожидаемое поведение: пользователь, обновляющий зависимость до `1.5.0`, может быстро понять из changelog, что изменилось, не изучая diff всего кода между версиями.
Подводные камни
- Частые ошибки. вставляют в changelog необработанные сообщения коммитов («fix typo», «wip», «merge branch...»), которые не несут пользы читателю; забывают обновлять changelog при экстренных хотфиксах, из-за чего он перестаёт отражать реальную историю релизов.