Подтвердить что ты не робот

Изменить базу веток

У меня есть дерево вот так:

(commit 1) - master
                \-- (commit 2) - (commit 3) - demo
                                                \-- (commit 4) - (commit 5) - PRO

и мне нужно переместить ветвь PRO в master

(commit 1) - master
                |-- (commit 2) - (commit 3) - demo
                \-- (commit 4) - (commit 5) - PRO

Я пробовал git rebase master из ветки PRO, но ничего не происходит.

Чтобы уточнить: я работал в мастер, а затем мне пришлось сделать демо-версию продукта (git checkout -b demo и некоторые коммиты). Затем, по ошибке, я создаю еще одну ветку из демонстрации (git checkout -b PRO и некоторые коммиты), и теперь мне нужно переместить ветвь PRO для управления и оставить демонстрацию неповрежденной. В конце обе демо и PRO будут зависать от мастера.

4b9b3361

Ответ 1

git checkout PRO # Just to be clear which branch to be on.
git rebase --onto master demo PRO

В принципе, вы берете все коммиты после demo до PRO и переустанавливаете их на фиксацию master.

Ответ 2

Оформить заказ до ветки PRO, скопировать самые старые (commit4) и последние (commit5) хэши фиксации этой ветки и вставить в другое место.

$ git checkout PRO
$ git log            # see the commit history
# copy the oldest & latest commit-hash 

Затем удалите ветвь PRO (сохраняйте резервную копию только для обеспечения безопасности). Создайте и проверите новую ветку PRO от master.

$ git branch PRO.bac        # create a new branch PRO.bac = PRO as backup

$ git checkout master
$ git branch -D PRO         # delete the local PRO branch
$ git checkout -b PRO       # create and checkout to a new 'PRO' branch from 'master'

Возьмите (вишневый выбор) диапазон коммитов предыдущего PRO, войдя в новую ветвь PRO.

$ git cherry-pick commit4^..commit5   # cherry-pick range of commits
# note the '^' after commit4

Теперь, если все в порядке, затем принудительно (-f) нажмите на ветвь remote PRO и удалите локальную ветвь PRO.bac.

$ git log                  # check the commit history

$ git push -f origin HEAD  # replace the remote PRO by local PRO branch history
# git branch -D PRO.bac    # delete local PRO.bac branch