В своих репозиториях веду ветки с номерами версий, 0.0.1, 0.0.2 и т.д.
Для этого в git есть тэги. Обычно делают тэг на каждый релиз + если уже есть скажем версия 0.1.1, то, если вам еще нужно поддерживать предыдущую версию, можно сделать ветку 0.0.x, и там уже делать тэги. Так если вы найдете уязвимости или баги в версии 0.0.x, можно спокойно поправить и выкатить минорный релиз. Ну или например баг затрагивает только версию 0.2.4, тогда мы делаем опять же коммит в ветке 0.2.x который фиксит проблему. Так же этот коммит можно либо смерджить либо черепикнуть в другие ветки, которые так же нуждаются в этом фиксе. Все очень привязано к тому как именно вы работаете.
Мастер должен быть стабилен (некоторые не согласны и заводят отдельную ветку release или prod для стабильного кода), и там должна находиться самая последняя версия. Мерджить мастер в более старые ветки иногда не ок и нужно просто понимать как вы хотите построить процесс разработки. Собственно если вы поддерживаете версию 0.4.x то смысла обновлять changelog для версий 0.5.x не особо много, и потому самый актуальный changelog в случае gitlab хранится в master.