Обычно я использую git rebase
:
git rebase --onto C A B
Это берет различия между A и B и применяет эти различия к ветви C. В качестве бонуса, rebase пропускает любые фиксации между A и B, которые выполняют те же текстовые изменения, которые уже существуют в ветви C.
Обновление: если вы упомянули в комментариях, помните, что Git никогда не перезаписывает историю прошлого. Таким образом, даже после выполнения перебазирования, описанного выше, вы можете воссоздать новый заголовок ветки при коммите, где B был до перебазирования. К сожалению, я не могу придумать простой способ сделать это в это время утром. Извините, я не могу больше помочь, возможно, кто-то еще придумает легкий путь!