Решение проблемы
Существует простое решение с использованием --onto
git rebase --onto B C
это означает:
Rebaseкоммит, достижимый из HEAD, чьим родителем является C поверх B.
Безопасность предлагаемого решения
В вашем случае
master
|
A - B - C
\
D' - E'
|
HEAD
git pull origin master
master
|
A - B - C
\
D' - E'
|
HEAD
git rebase master
просто ничего не сделает.Как вы можете видеть, ваша ГОЛОВА уже основана на мастере.Так что git скажет вам, что делать нечего.
В git все локальное (без push) безопасно, так как у вас нет неверсированной локальной модификации, просто поместите какой-нибудь временный тег или ветки, если вы этого не делаетеуверен в том, что ты делаешь.Вы всегда можете вернуться к ним, если испортите свое дерево.