背景
ローカルでいくつかのコミットから、一つのコミットを無くしたい
$ git log -10 --oneline
84a0ea816 commit4
3259ea98b commit3
a7d8e5594 取り消したいcommit
7a1b94742 commit2
7a1b94741 commit1
7a1b94743 Merge pull request xxx(from develop)
期待する結果
$ git log -10 --oneline
84a0ea816 commit4
3259ea98b commit3
7a1b94742 commit2
7a1b94742 commit1
7a1b94743 Merge pull request xxx(from develop)
対応方法
revert
$ git revert a7d8e5594
d88adea80 Revert "xx commit"
84a0ea816 commit4
3259ea98b commit3
a7d8e5594 取り消したいcommit
7a1b94742 commit2
7a1b94742 commit1
7a1b94743 Merge pull request xxx(from develop)
ただ、これではcommitの内容を取り消しされて、コミット履歴は残ってる
cherry-pick
いい方法がなくて
developからブランチを切る
commit1,2を入れる
commit3,4を入れる
$ git co -b feature/new origin/develop
$ git cherry-pick 7a1b94743..7a1b94742
$ git cherry-pick a7d8e5594..84a0ea816
結果
$ git log -15 --oneline
84a0ea816 commit4
3259ea98b commit3
7a1b94742 commit2
7a1b94742 commit1
7a1b94743 Merge pull request xxx(from develop)
もっと簡単な方法がご存知の方はぜひコメントお願いします。(あるはず)
rebase
twitte_raruさんからコメントいただいた方法が一番良さそうです。
$ git rease -i 7a1b94743
出てきた画面で消したいcommitを消して保存する
pick 7a1b94743 Merge pull request xxx(from develop)
pick 7a1b94742 commit1
pick 7a1b94742 commit2
pick a7d8e5594 取り消したいcommit
pick 3259ea98b commit3
pick 84a0ea816 commit4
完了!一番簡単の気がします。