Я уже четвёртый раз отвечаю на подобный вопрос:
Собсно, как делаем мы -
toroid.org/ams/git-website-howto . Это процесс деплоя. В свой локальный репозиторий добавил два ремоута - prod & test. Это помимо origin, который указывает на ваш общий bare git репозиторий, на гитхабе, например. Собсно сначала выкладываю на тест одной командой
git push test master
потом, если всё хорошо, уже на прод
git push prod master
Если нужны какие-нибудь пост-обработки, то они происходят на сервере через хуки гита.
По поводу workflow. Простейший вариант - Github Flow.
Есть одна ветка, master - там всегда то, что сейчас на проде.
Чтобы сделать фичу/починить баг вы создаёте новую ветку из мастера, коммитите в неё, когда всё сделали мерджите её в мастер. Перед мерджем, понятное дело, обновите свой мастер, вдруг кто-то туда уже смерджил свою ветку с другой фичой. Хотите перед мерджем протестировать свою фичу?
git push test my-feature:master
это запушит вашу ветку на тестовый сервер.