Бранчи обособленные - это да, суть ошибки в том, что есть несохраненные изменения и даже не очень важно, чтобы изменялись одни и те же файлы. Переключится можно или потеряв все изменения или сохранив их выполнив коммит/добавив в stash. По-этому гит предлагает вам решить, что делать с этими изменениями и только потом позволит переключиться на другой бранч.
Могу предположить, что после git clone у вас активной является ветка master в которой нет всех файлов. Как уже предположили, видимо вам нужно сделать git checkout dev после git clone.
То что вам нужно и есть git.
Вы пишите код, пушите его, срабатывает git-hook, который выполняет deploy на ваш сервер.
Для синхронизации БД используете миграции, которые автоматически применяются при разворачивании на сервере.
Не уверен, что это правильный подход. Обычно лучше оставить конфиги в репе и создать правило на игнор локальных конфигов, которые переопределяют глобальные, если заданы.