Используйте git rebase.
Во-первых, перебазируйте свой C поверх B:
git checkout C
git checkout -b rebasedC #Let's do a new branch for it also, just in case
git rebase B
это поместит все коммиты C на B.
Теперь мы хотим перебросить ветку трансплантата C с B на A:
git rebase --onto A B rebasedC
Итак, теперь у вас есть C-коммиты над A в ветке rebasedC. Теперь вы можете перемотать A на него:
git checkout A
git merge rebasedC
git branch -d rebasedC# I don't think you would need it.
Это все, я надеюсь.