Вы можете сделать это с интерактивной перебазировкой - но не перебазой B1 на B2.Вместо этого выполните:
git rebase -i B1 hash-of-C2^
(вместо hash-of-C2 вы введете фактический хэш C2, то есть шестнадцатеричную строку, которая выглядит как ddc18e47147f4f5cb969609150c4d29040b2c07f
, которую вы можете увидеть, используяgit log
)
, затем в редакторе вы увидите:
pick short-hash-of-C2 commit comment here
pick short-hash-of-C3 commit comment here
(короткий хеш будет префиксом полного хешаC2, например ddc18e47
)
Теперь замените keep
на drop
для C2, но добавьте строку для C4, так что теперь у вас есть:
drop short-hash-of-C2 commit comment here
pick full-hash-of-C4
pick short-hash-of-C3 commit comment here
(Обратите внимание, что короткий хэш C4 также должен работать, но мне нравится просто копировать весь хэш, а не сокращать его в случае, если я испорчу его.)
Вот и все.Конечно, вам может потребоваться разрешить конфликты из-за этих изменений, как и при любой перебазировке.