Как правильно слить ветку в 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 вstage
c-s ours
- при этом в stage нет никаких изменений, но git считает, что merge выполнен - Мёрджим
main
вstage
- теперь туда попадает толькоfix-2
.
Я писал по памяти и не проверял, так что на всякий случай осторожнее, но по идее должно сработать.
И ещё, если воспользоваться этой схемой, то всё, что было в main
до этого мёрджа, с помощью стандартных мёрджей уже не сможет попасть в stage
. Я не уверен, но мне кажется, что при мёрдже из stage
в main
оно будет удалено из main
(по крайней мере, если не используется -s ours
).