Как вы обнаружили, есть две операции, которые делают изменения от одного человека доступными для другого (или многих, с любой стороны).
Есть вытягивание, которое берет изменения от какого-то другого клона хранилища и помещает их в ваш клон.
Есть push, который берет изменения из вашего хранилища и помещает их в другой клон.
В вашем случае ваш коллега внес свои изменения в то, что, как я полагаю, является вашим центральным хозяином хранилища.
После того, как он это сделает, вы можете перенести последние изменения в свой репозиторий и объединить их с вашей веткой. Это будет включать любые исправления или изменения, которые ваш коллега внес в ваш экспериментальный код.
Это дает вам свободу быть в курсе других разработок коллег в вашем проекте, и вам не нужно выпускать свой экспериментальный код, пока он не будет готов (или даже вовсе).
Итак, пока вы держитесь подальше от команды Push, вы в безопасности.
Конечно, это также предполагает, что никто не вытаскивает напрямую из вашего клона репозитория, если они это сделают, то, конечно, они получат ваши экспериментальные изменения, но это не похоже на то, что вы настроили это таким образом (и это очень маловероятно.)
Что касается файлов конфигурации, типичный способ сделать это состоит в том, что вы просто фиксируете шаблон основного файла в хранилище с другим именем (т.е. с дополнительным расширением .template или аналогичным), а затем помещаете имя реальный файл конфигурации в фильтр игнорирования.
Затем каждый разработчик должен сделать свою собственную копию шаблона, переименовать его и изменить его так, как он хочет, без риска передачи строк подключения к базе данных, паролей или локальных путей в хранилище.
При необходимости предоставьте скрипт, который поможет разработчику создать настоящий файл конфигурации, если он длинный и сложный.