Как правильно делать частичный merge чтобы избегать последующего геморроя?
Привет.
Как правильно делать частичный merge чтобы избегать последующего геморроя? Нам требуется соблюдение нескольких условий при слияниях:
1)визуальное отображение того, откуда куда что было залито
2)чтобы при частичном слиянии (допустим я проверил часть кода из ветки которую хотим залить в основную ветку) не пропадала остальная, еще не залитая часть. При обычном merge сейчас после частичного слияния уже не получается сливать повторно те изменения которые остались изначально не залитыми, соответственно они теряются
Я знаю о cherry-pick но с ним не выполняется пункт 1 + насколько я помню там еще надо базовую ветку назад вливать в ту из которой делаешь cherry-pick чтобы не было проблем. В общем, как делаете вы и что посоветуете?
Расскажу подробнее ситуацию. Есть основная ветка develop из которой под каждую новую фичу создается ветка feature/some_new_feature, таких веток может накапливаться около 10-20, т.к. несколько разработчиков ведут параллельную работу над разными фичами. Проверяю все это перед релизом я один, соответственно проверка может затягиваться т.к. их много а я один. Каждый из них периодически подливает к себе обновленный develop, и при слиянии помимо изменений которые они сделали в своей ветке, попадают так же изменения из develop что не есть хорошо....
В общем нужно чтобы я мог:
1)заливать в master только их изменения сделанные по конкретной задаче
2)возможность делать это частями
Есть ветки:
1)develop - так же как на схеме
2)beta - код, который соответствует тому что мы устанавливаем клиенту на тестовую базу
3)master - тот код который залит в рабочую базу
feature/some_feature заливается в develop после внутреннего тестирования
feature/some_feature заливается при этом в beta и одновременно закачивается в тестовую базу клиента
когда клиент протестирует изменения, если он находит ошибки, то в feature/some_feature делаются дополнительные коммиты с исправлением и изменением тестов, потом это снова заливается в develop и в beta. Если никаких ошибок больше клиентом не найдено, ветка feature/some_feature удаляется, а beta заливается в master, одновременно с этим делается заливка модулей в рабочую базу клиента.
Дело в том, что из feature в beta иногда хочется перенести только часть изменений, которые мы протестировали и они стабильно работают, при этом мы делаем merge и вторая часть уже пропадает, т.е. не доступна для повторного merge - показывает как будто изменений между ветками нет.
Все это прекрасно, я это уже читал много раз. только есть практические вопросы использования. допустим у нас нет релизов, у нас релизы по сути делаются по каждой отдельной задаче, т.к. мы разрабатываем модули к системе, а не улучшаем уже имеющиеся. Есть ветки:
1)develop - так же как на схеме
2)beta - код, который соответствует тому что мы устанавливаем клиенту на тестовую базу
3)master - тот код который залит в рабочую базу
feature/some_feature заливается в develop после внутреннего тестирования
feature/some_feature заливается при этом в beta и одновременно закачивается в тестовую базу клиента
когда клиент протестирует изменения, если он находит ошибки, то в feature/some_feature делаются дополнительные коммиты с исправлением и изменением тестов, потом это снова заливается в develop и в beta. Если никаких ошибок больше клиентом не найдено, ветка feature/some_feature удаляется, а beta заливается в master, одновременно с этим делается заливка модулей в рабочую базу клиента.
Дело в том, что из feature в beta иногда хочется перенести только часть изменений, которые мы протестировали и они стабильно работают, при этом мы делаем merge и вторая часть уже пропадает, т.е. не доступна для повторного merge - показывает как будто изменений между ветками нет.