Как правильно слить ветку в git?
У меня есть ветки main и stage. От ветки main я сделал новую ветку fix-1. Чтобы проверить все правки, я слил fix-1 в ветку main, потом сделал ветку fix-2 от main. Её тоже слил в ветку main. Теперь нужно в начале слить ветку fix-2 в ветку stage, чтобы изменения fix-1 не попали в stage. Как правильно это сделать?
Смотрел в сторону cherry-pick. Но мне это кажется не очень правильным, потому как бывают ситуации, когда веток и комитов в ветках куда больше.
Ответы (1 шт):
Очень похоже на какую-то работу с релизами и поддержку старых версий.
Т. е. в stage старая поддерживаемая версия, в main - текущая разработка, fix-1 надо внести только в новую версию, а fix-2 - в обе.
В таком случае правильно было создавать ветку fix-2 от stage, а потом сам stage мёрджить в main. Если есть пропускаемые коммиты, то мёрджить их отдельно с -s ours.
Если уже есть описанная история коммитов и не планируется в дальнейшем мёрджить stage в main, то можно сделать так:
- Мёрджим
fix-1из main вstagec-s ours- при этом в stage нет никаких изменений, но git считает, что merge выполнен - Мёрджим
mainвstage- теперь туда попадает толькоfix-2.
Я писал по памяти и не проверял, так что на всякий случай осторожнее, но по идее должно сработать.
И ещё, если воспользоваться этой схемой, то всё, что было в main до этого мёрджа, с помощью стандартных мёрджей уже не сможет попасть в stage. Я не уверен, но мне кажется, что при мёрдже из stage в main оно будет удалено из main (по крайней мере, если не используется -s ours).