Ответ 1
git checkout PRO # Just to be clear which branch to be on.
git rebase --onto master demo PRO
В принципе, вы берете все коммиты после demo
до PRO
и переустанавливаете их на фиксацию master
.
У меня есть дерево вот так:
(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 будут зависать от мастера.
git checkout PRO # Just to be clear which branch to be on.
git rebase --onto master demo PRO
В принципе, вы берете все коммиты после demo
до PRO
и переустанавливаете их на фиксацию master
.
Оформить заказ до ветки 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