правильно организовывать "выкладку" на сервер
У каждого свои подходы. В общем случае, выделяют следующее:
Есть ветка master, в которой находится production код, есть ветка staging, в которой находятся фичи, которые нужно тестить. Есть кучи feature-бренчей, которые можно мерджить только со staging, а после того как код в стэйджинге стабилизировался, можно мерджить ветку в продакшен.
Подробнее о таком подходе можно почитать у фаулера,
feature-branch. Есть еще другие методологии, типа feature-switch, а еще можно вообще не париться. Все от проекта зависит, количества разработчиков и все такое.
По поводу же выкладки на сервер - самый пожалуй правильный способ, использовать ansible или подобные штуки, и запускать сборку на CI сервере после успешного прогода тестов (что куда лить можно вешать по пушу в соответсвующую ветку).
Миграции в контексте yii придется делать руками, причем сразу при реализации каких-то фич. Миграции все же создавались для версионизации структуры данных, так что это даже больше для разработчика, нежели для деплоя. Сразу хочу заметить, что лучше писать такие миграции, которые не ломают логику работы более старой версии приложений (то есть стараться не удалять поля у таблиц, а только разрешать ничего туда не писать, или таблицы не удалять). Хотя опять же зависит от проекта и команды. Автоматизировать создание миграций для схемы данных будет проблематично, ибо модели не дают надежной инфы о схеме (то есть из модели не сгенерить таблицу, хотя можно это реализовать).