Один из подходов состоит в том, чтобы сохранить ветвь для каждой среды, а также «основную» ветвь, которая является общей для всех сред. Всякий раз, когда вы вносите изменения в основную ветку и хотите перенести их в другую систему, выполните что-то вроде:
git pull
git checkout local
git rebase master
Это перезапишет текущие изменения в "local" (для данной конкретной среды) в соответствии с текущим состоянием "master".
Ручная вещь, на которую вам нужно обратить внимание, это то, где вы совершаете изменение, которое хотите внести. Если он является локальным для системы, передайте его в "локальную" ветвь этой системы, иначе передайте его в "master" и отправьте в общий репозиторий.
Конечно, перебазирование может привести к конфликтам, которые вы должны разрешить вручную. Также, если вы решите отправить локальные ветви в общий репозиторий, вам придется (а) выбрать уникальные имена для каждой среды и (б) иметь дело с толчками без ускоренной перемотки вперед после перебазировки. Обе эти проблемы разрешимы.