Gitで数個前のcommitを遡って分割する
数個前のcommitを遡って、それを分解して2つのcommitに分けたいとか、たまにある。
例えば、git log
で上から遡って5つ目のcommitを2つに分けたい場合
git-rebase -i で5個目のcommitを
$ git rebase -i HEAD~5
edit
に変えるで、git-rebase -i した状態で、HEADの位置をさらに一つ手前のcommitに移動する
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'に変える
すると、分割したいcommitの中のファイルがUnstageされる
$ git reset HEAD~
分けたい部分を別々にaddしてcommitし直す
Unstaged changes after reset:
M app/assets/stylesheets/screen.css.sass
M app/views/tasks/index.html.haml
とかやって、2つの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'
すると、普通にrebaseが成功して、commitが遡って分割できる。めでたいヾ(*'ω'*)ノ゙
$ git rebase --continue