Хранишь в master-ветке только работоспособный код.
При развертывании нового сервера
git clone git@repo/repo.git path/to/project --depth=1
при обновлении
git pull origin master
Для автоматического обновления при push'е в мастер, настраиваешь хук на скрипт доступный из интернета который будет делать
git pull
Команда
git pull притягивает только изменения