Почитайте про набирающую популярность модель ветвления
Trunk Based Development.
При использовании этой модели вам потребуется ветка master (trunk) и ветки для релизных версий. В master вы ведете разработку (в вашей терминологии это development) для каждой версии выходящей к пользователям вы создаете отдельную ветку, например 1.0.x.
Самое главное: все изменения вносятся разработчиками только в ветку master. Только ответственные люди могут создавать релизные ветки и переносить изменения из master в них, в том числе и при внесении изменений в выпущенные версии. Релизы
собираются только с релизных веток.
В этой модели разработчики не ограниченны в создании локальных веток, но их никто не хочет видеть на общем сервере. У разработчиков нет прав на создание веток на общем сервере.
Процесс выглядит так:
1. Разработчик делает pull master.
2. Если нужно создает локальную ветку и работает в ней.
3. Прогонят тесты на ветке и мержит ее с master.
4. Делает push.
5. CI видит новый коммит, получает его и выполняет на нем модульные, интеграционные и приемочные тесты.
Я не очень понимаю, для чего могут потребоваться автоматические коммиты, мое мнение - этот процесс должны контролировать люди. А задачи в issue-tracker должны закрывать тестеры или разработчики, если они написали соответствующие тесты.
В том, что на CI не пройдут тесты нет ничего страшного. Он вообщем-то для этого и нужен. Откатывать коммит не нужно, нужно быстрее делать новый, в котором ошибка исправлена.