Да, это возможно, но это DISTRUCTIVE изменение истории, и вы должны быть осторожны с ним.
давайте сначала дадим нужным коммитам несколько фиктивных SHA, чтобы можно было их идентифицировать в командах git:
Текущее состояние:
^
|
* F679B1B <-- current commit on master
|
* 11937F5 <-- merge commit
|\
| \
* | D2FD393
| |
| * <-- 45C9A66 new-feature branch
| |
* | 91C021C
| /
|/
* 15B6BDD
|
* A132263 <-- release commit on master
|
и идея заключается в следующем:
git checkout master
git checkout -b second_master
- сделать полный сброс до фиксации релиза на
master
:
git reset --hard A132263
- ветка новой функциональной ветки:
git checkout -b new-feature
- переместите ваши коммиты из старой ветви функций в новую ветку функций, одну за другой, и по порядку:
git cherry-pick 45C9A66
- слияние или выдача запроса на слияние
seond-master
при коммите релиза:
git checkout second-master
git merge new-feature
- получить другие коммиты из оригинала
master
:
git cherry-pick 15B6BDD
git cherry-pick 91C021C
git cherry-pick D2FD393
git cherry-pick F679B1B
- проверить, если состояние
second-master
в порядке, а затем выполнить жесткий сброс исходного master
на него
( ОСТОРОЖНО РАСПРЕДЕЛИТЕЛЬНАЯ КОМАНДА : после этого оригинал master
теряется и заменяется на second-master
):
git checkout master
git reset --hard second-master
После этих шагов у вас должно быть следующее состояние в вашем git-репо:
Состояние результата:
^
|
* 75C70DB <-- current commit on master
|
|
* BC63DDC
|
|
* 03042CF
|
|
* 019D5F6
|
* E3FAABE <-- merge commit
|\
| \
| |
| |
| * <-- 45C9A66 new-feature branch
| |
| |
| /
|/
* A132263 <-- release commit on master
|
надеюсь, это поможет вам создать впечатление, стоит ли этого делать или нет, и направит вас по этому пути.