После вашего первого перебазирования это не это:
A---B---C master
\
D---E'---F' b1
A---B---C---D---E---F---G---H---I b2
, а скорее это:
A---B---C master
\
D---Ea---F' b1
\
E---F---G---H---I b2
Здесь Ea
означает исправленный E
коммит. И вы хотите этого, если я правильно понимаю:
A---B---C master
\
D---Ea---F' b1
\
G'---H'---I' b2
Вы можете добиться этого с помощью интерактивной перебазировки:
git checkout b2
git rebase -i b1
В редактировании перебазирования вы закомментируете строки для фиксации E:
# pick df8efe6 E
pick a7fcbed G
pick 936b51a H
pick c77ca69 I
# ...
# Commands:
# p, pick = use commit
# ...
# If you remove a line here THAT COMMIT WILL BE LOST.
Отвечая на ваш комментарий, если вы хотите go полностью от начальной позиции (ABCDEFGHI) до желаемой конечной позиции:
git checkout b2
git rebase -i master
В редакторе:
pick 1234567 D
edit a7fcbed E
pick 936b51a F
pick c77ca69 G
pick 1e8d614 H
pick 8daafa7 I
# ...
# p, pick = use commit
# e, edit = use commit, but stop for amending
# ...
Когда закончите, исправьте ветку b1
:
git checkout b1
git reset --hard 936b51a
Вы также можете посмотреть другие ответы для вдохновения. Я не уверен, почему вы хотите добиться всего этого с помощью одной команды; вам все равно придется изменить коммит E где-нибудь в процессе. Таким образом вы сэкономите одну интерактивную переустановку.