Gitで数個前のcommitを遡って分割する

数個前のcommitを遡って、それを分解して2つのcommitに分けたいとか、たまにある。

例えば、git logで上から遡って5つ目のcommitを2つに分けたい場合


$ git rebase -i HEAD~5
git-rebase -i で5個目のcommitをeditに変える

pick xxxxxx Add JS files
pick xxxxxx Move Vendors CSS files
pick xxxxxx Add jquery.powertip
pick xxxxxx Add font
edit xxxxxx Design for tasks#index ← 分割したいcommitの 'pick' を 'edit'に変える
で、git-rebase -i した状態で、HEADの位置をさらに一つ手前のcommitに移動する

$ git reset HEAD~
すると、分割したいcommitの中のファイルがUnstageされる

Unstaged changes after reset:
M app/assets/stylesheets/screen.css.sass
M app/views/tasks/index.html.haml
分けたい部分を別々にaddしてcommitし直す

$ git add app/assets/stylesheets/screen.css.sass
$ git commit -m 'Sass for tasks#index'
$ git add app/views/tasks/index.html.haml
$ git commit -m 'Markup for tasks#index'
とかやって、2つのcommitができたら、普通に

$ git rebase --continue
すると、普通にrebaseが成功して、commitが遡って分割できる。めでたいヾ(*'ω'*)ノ゙