В последнем проекте, где я работал, было так:
Работает каждый у себя в локалке или на своем сервере. Каждая задача делалась в отдельной ветке, после чего создавался pull request в dev ветку.
Если тим лид после ревью был согласен ветку слить, то ветка сливалась в dev.
dev ветка автоматически бралась (git pull) с гитхаба и отображалась на staging сервере.
Если после теста на staging все было ок, то тогда ветку отправляли в продакшен (на другой сервер) и делалось это сливом ветки dev в master, т.е. продакшен сервер автоматически тянул master ветку
как сделать также? Довольно легко.
1. Нужно создать свой гит репозиторий, например, на гитхабе.
2. Поднять staging сервер (для пре-релиза и тестирования) и по крону делать git pull origin dev, например, раз в 10 минут
3. Также на продакшен сервере по крону делать git pull origin master
Сливать ветки руками после каждого pull request в dev или тестирования в master и после делать push на гитхаб.
Не знаю понятно ли описал, если что - спрашивайте.