手順としてはこんな感じ。
git checkout -b rearrange-code/XXX # 幹
git checkout -b rearrange-code/XXX-A # 側枝
git checkout -b rearrange-code/XXX-B # 側枝
# 順序を入れ替えたいコード(XXX)以外を削除
git commit -a -m "Branch for changing the order of XXX function."
git checkout rearrange-code/XXX-A
git merge --no-ff -m
git checkout rearrange-code/XXX
git reset rearrange-code/XXX-A
# 順序を入れ替えたいコード(XXX)を移動
commit commit -a --amend -m "Change the order of XXX function."
側枝 rearrange-code/XXX-B に入れ替えたいコードのみを分離しておいて、
側枝 rearrange-code/XXX-A に first-forward せずに merge する(この時点では入れ替えたいコード以外は消滅している)。
その後 rearrange-code/XXX の working copy (これは入れ替え前の状態)を維持したまま commit id だけ rearrange-code/XXX-A に振り替えて、
目的のコードの順序を入れ替えた後、--amend オプション付きで commit すれば、
側枝 rearrange-code/XXX-B に退避しておいたコードの blame が幹である rearrange-code/XXX に継承されるという寸法。