Командная работа в Git
Хотел набить длинный ответ, но забил. Все-таки идеального решения не бывает. Для двух разрабов я бы делал так:
dev.site.ru ->test.site.ru->www.site.ru 
кажому разрабу локально ставить гит-репозитарий, и сначала работать в локале, потом коммититься в dev и там смотреть как работает на норм. данных. Ну и дальше миграцию по стрелкам.
Как поступаю я в такой ситуации:
Есть master, там всегда только стабильный код, то бишь после каждого коммита перед пушем (в идеале перед коммитом) прогоняются тесты. Все фичи делаются в локальных ветках (если людей фичу делает несколько — эту ветку можно запушить). Когда фича закончена — она мерджится в master.

dev версия сайта обычно клонится с master, в редких случаях создается ветка dev (хотя на моей памяти никогда это не нужно было).

А дальше, если работаете итерациями и у вас несколько версий должно быть задеплоено — все разносится по своим веткам. На сервере же делается просто checkout нужной ветки.

То бишь доделали фичу — смерджили в мастер. Прогнали тесты. Если все хорошо — пушим. Если нужно выкатить на лайв или куда еще — мерджим фичу/master в нужную ветку. После изменений в ветках отличных от master все должно быть замерджено в него, ибо ветки с фичами делаются от мастера.