Если у вас такая ситуация:
x--x--x--x--x1--------m--y--y (master)
\ /
\ /
-o--o--o--z--z (deleted)
Вы могли бы:
- создать ветку
tmp
, тег m
и сбросить на x1
- используйте
git reflog
, чтобы получить ГОЛОВУ удаленной ветви 'br' и создать на ней ветку 'br', а также тег o1 (последние 'старые' коммиты перед вашими экспериментальными коммитами)
[tagM]
-m--y--y (tmp)
/
/
x--x--x--x--x1 (master)
\
\
-o--o--o1--z--z (br)
[tagO]
- git checkout br && git rebase --onto master o1
[tagM]
-m--y--y (tmp)
/
/
x--x--x--x------x1 (master)
\ \
\ \
-o--o--o1 z--z (br)
[tagO]
- объединяет только те коммиты, которые вы хотите освоить:
git checkout master && git merge br
[tagM]
-m--y--y (tmp)
/
/
x--x--x--x------x1--------m2 (master)
\ \ /
\ \ /
-o--o--o1 z'--z' (br)
[tagO]
- перебазировать остальные коммиты, сделанные после первоначального слияния поверх
master
.
[tagM]
-m
/
/
x--x--x--x------x1--------m2--y'--y' (master,tmp)
\ \ /
\ \ /
-o--o--o1 z'--z' (br)
[tagO]
git checkout tmp && git rebase --onto master tagM && git merge master
(ускоренное слияние)