Gitで過去のコミットを改変する際にはgit rebase -iを用いるのが一般的ですが、私はささいな変更のとき以外は使いません。git rebase -iを使うと、--continueしてconflictが多発したときに、よくわからなくなって--abortしたくなるからです。
私が過去のコミットを改変するときは、まずそのコミットからブランチを作ります。たとえば、以下の履歴でBを改変するときは、まずgit checkout -b rebase/b Bとしてブランチを作ります。
A-B-C-D-E develop
rebase/b
↓
A-B-C-D-E develop
Bを修正してgit add; git commit --amendします。
B' rebase/b
/
A-B-C-D-E develop
次に、B'にC-D-Eをつなげていきます。conflictしそうにないときは、git rebase --onto rebase/b B developで一気につなげます。
A-B'-C'-D'-E' rebase/b develop
rebase中によくわからなくなりそうなときは、cherry-pickで一つずつつなげます。git cherry-pick Cすると以下のようになります。conflictしたら直してください。
A-B'-C' rebase/b
\
B-C-D-E develop
続いてgit cherry-pick Dします。
A-B'-C'-D' rebase/b
\
B-C-D-E develop
残りはEだけなのでrebaseします。git rebase --onto rebase/B D developとすると以下のようになります。これで完成です。
A-B'-C'-D'-E' rebase/b develop
そもそも、rebase中によくわからなくなりそうなほど、古いコミットを大きく書き換えるのが悪いのですが、そういうときでもこの手順ならうまく処理できると思います。