Похоже, у вас есть несколько проблем здесь:
1. Определение функций для конкретной версии
Это проблема управления проектом и проблема координации. Будет ли эта функция выпущена до, одновременно или после этой другой функции? Если релизы хотят появляться по одной функции за один раз, то определите это. Если функции будут сгруппированы в релизы, то выясните, что это за группы, и примените их к разработчикам и лицам, принимающим решения. Используйте систему отслеживания проблем или тикетов, чтобы помечать релизы. Дайте понять, что если одна из функций определенного выпуска запрещена, то все они есть.
2. Стратегии ветвления
Git-flow - простой ответ на подобные проблемы, и часто люди используют вариант git-flow, даже если они не знают, что это такое. Я не собираюсь говорить, что это универсальное решение для всех проблем, но это очень помогает.
Похоже, у вас возникла проблема с недетерминированными стратегиями выпуска, когда функции одобрены как scattershot, и что-то, что начало разрабатываться давным-давно, может быть выпущено после чего-то, что началось совсем недавно - функции скачкообразного изменения.
Долгоживущие функциональные ветки или ветки одновременного выпуска, вероятно, являются лучшим ответом для такого рода проблем. Объедините (или перебазируйте, если вам это удобно) последние новости от мастера в свои долгосрочные ветви. Будьте осторожны, объединяйте только те функции, которые уже работают, в противном случае вы столкнетесь с проблемами, с которыми вы столкнулись сейчас (слишком много смешанных функций в одной ветви).
Ветви «исправлений» или «исправлений» являются неотъемлемой частью этого процесса; используйте их для небольших одноразовых исправлений с коротким циклом контроля качества.
Из вашего описания может быть даже лучше не поддерживать официальную ветку «разработка». Скорее, разветвите все функции от главного и создайте объединенные выпуски после определения выпуска.
3. Среды
Не совмещайте ветки git с вашей средой, за исключением production == master. Ветвь 'развития' должна считаться сломанной. Ветви релизов отправляются в тестовые среды, будь то среда QA или промежуточная среда. Если вам нужно, отправьте конкретную ветвь функции в среду.
Если у вас есть более одной ветви функций, которую нужно выпускать отдельно, но в то же время тестировать ..... ¯ \ _ (ツ) _ / ¯ .... раскрутить другой сервер? Может быть, объединить их в одноразовую ветку ... зафиксировать исправления / изменения в исходных ветках и заново объединить в одноразовую ветку; сделать окончательное утверждение и UAT по отдельным веткам релиза.
4. Удаление неподтвержденных функций из ветки
Это то, чего пытаются избежать вышеупомянутые мысли, потому что это, без сомнения, самая болезненная вещь, которую можно попытаться сделать. Если вам повезет, функции были объединены в вашу ветку разработки или тестирования атомарно с помощью коммитов слияния. Если вам не повезло, разработчики посвятили себя непосредственно ветке разработки / тестирования.
В любом случае, если вы готовитесь к отпуску и имеете несанкционированные изменения, вы должны будете использовать Git , чтобы вернуться из этих неутвержденных коммитов из ветви выпуска; Лучше всего сделать это перед тестированием релиза.
Удачи.