Первый вопрос: git - распределенная система контроля версий, предполагающая, что все ветки будут синхронизироваться с остальными участниками. Поэтому бояться хранить в удаленном репозитории какие-то "не те" ветки не стоит, единственное, что нужно обговаривать условия именований (например feature - ветки можно именовать по шаблону feature/{task_id}). Кроме того git flow предполагает наличие feature - веток, release, hotfix etc. поэтому ограничиваться в этом плане не стоит.
Второй вопрос: это ветки, в которых идет доработка предыдущих релизов. Например, если в версии 3.2.2 нашелся баг, то чтобы пользователи с версией 2.5.5 получили это исправление тоже, коммит с исправлением попадает и в ветку 3.2.х (и выпускается релиз версии 3.2.3) и в ветку 2.5.х (и выпускается релиз версии 2.5.6). Это опционально, кому-то просто удобно разрабатывать так, но вы можете выбрать то, как удобнее именно вам и вашей команде