3-строчное черри-решение, менее лаконичное, чем отличный ответ Криса, но, возможно, более ясное для некоторых, может выглядеть так:
git branch backup-B B
git checkout -B B master
git cherry-pick A..backup-B
Объяснение шагов:
1) сделать резервную копию (также служит ссылкой для последующего выбора вишни)
git branch backup-B B
c1---c2---c3 <<< master
\
c4---c5---c6 <<< A
\
c7---c8---c9 <<< backup-B, B <<< HEAD
2)точка B в мастере (и проверить его одновременно)
git checkout -B B master
c1---c2---c3 <<< master, B <<< HEAD
\
c4---c5---c6 <<< A
\
c7---c8---c9 <<< backup-B
3) "скопировать" недостающие коммиты (НЕ доступно изA, но достижимый из "старого" B, здесь c7
, c8
, c9
)
git cherry-pick A..backup-B
c7'---c8'---c9' <<< B <<< HEAD
/
c1---c2---c3 <<< master
\
c4---c5---c6 <<< A
\
c7---c8---c9 <<< backup-B
(конечно, на данный момент, хотя и не обязательно, вы можете просто сбросить резервную копию с помощью git branch -D backup-B
, чтобы получить точный результат, о котором вы просили. Однако такой спасательный жилет - легкая ноша для гититана; -)