Важно: перед игрой с rebase
либо протестируйте команды на копии вашего репозитория, либо узнайте, как использовать reflog для отмены изменений в вашем репозитории.
Вы, похоже, описываете ситуацию следующим образомthis:
master
*
|
| b1 b2
* * --- *
| /
|/
*
и вместо этого вы хотите
master
*
| * b2
|/
*
| * b1
|/
*
В этом случае выполните ребазинг следующим образом:
git rebase --onto master^ b1 b2
Это перемещает все коммиты, доступные с b2
но не из b1
и коренит их при фиксации непосредственно перед master
.Обратите внимание, что вы действительно можете рассчитывать только назад от master
, чтобы определить правильное место назначения;вы не можете рассчитывать вперед от общего предка b1
и master
, потому что коммиты не отслеживают своих детей, только их родителей.