Это легко и чисто.
Вы бы создали ветку развертывания, например:
> git checkout deployment-1234
Теперь вы можете вносить изменения, специфичные для развертывания. Как только это будет сделано, передайте это:
> git commit -as
Вернитесь в свою основную ветку.
> git checkout master
Сразу же объедините ветку развертывания. Это изменит вашу основную ветку с учетом этих изменений, связанных с развертыванием, но не волнуйтесь, мы вернем ее.
> git merge --no-ff deployment-1234
Чтобы отменить изменения, просто извлеките файлы перед объединением и передайте их с поправкой.
> git checkout HEAD^ .
> git commit --amend
Вот и все. Теперь git считает, что файл изменяется в первом коммите развертывания-1234, как уже было рассмотрено мастером и признано неподходящим. Таким образом, он никогда не добавит эти изменения в основную ветку, даже если вы попытаетесь объединить всю ветку развертывания-1234 с главной. (Попробуй!)
Я также использую другой метод в проекте, который требует лучшего контроля. Плохая вещь из вышеперечисленного заключается в том, что вы можете создать конфликт во время будущего слияния от развертывания-1234 до мастера. Это нормально, если эти слияния выполняются вручную. Но если вам нужны автоматические слияния, лучше, если я смогу предотвратить этот систематический конфликт. Поэтому вместо этого я создал скрипт, который может применять и отменять изменения, связанные с развертыванием. Тогда сами изменения не обязательно должны быть в репозитории, вместо этого в репозитории появится этот сценарий.