У нас были такие ветки:
1. master. Стабильная ветка разработки. Девелоперы не могут коммитить в нее. develop вливается в master.
2. develop. Более менее стабильная ветка разработки, которую можно в любой момент слить с master'ом.
3. feature-somefeature, feature-onemore… Ветки девелоперов в которых они работают, реализуют фичи. Как только бранч оттестирован, он вливается в develop.
4. hotfix-hotfixname, hotfix-onemore… Когда был найден критичный баг и его надо срочно пофиксить но develop пока не готов для слива в master, из мастера создается хотфикс-ветка, делается фикс, хотфикс заливается в master и develop (с правкой конфликтов, если такие возникают).
У нас также были развернуты тестовые сервера, их конфигурация была идентична с конфигурацией продакшн-сервера. На тестовых серверах девелоперы могли переключиться на свою ветку и протестировать вживую работу какой-то фичи.
Ну а продакшн-сервер смотрит на master и когда надо на нем делается git pull.