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