git checkout branch-B
git cherry-pick branch-A # you could also specify H directly
Теперь у вас есть H поверх G.
git checkout branch-A
git reset --hard HEAD^ # you could also specify D directly
# HEAD is the current commit; HEAD^ is the previous one
Теперь вы удалили H из ветви, которая содержала A-B-C-D.
Обратите внимание, что это имеет смысл только в том случае, если в начале есть ссылка на ветку, указывающая на H и G, так как объект фиксации в git включает его предков; «перемещение» коммита ничего не значит, поскольку оно меняет ваши ветви.