次のような流れのブランチで過去のコミットを取り消したい場合、
$ git log --pretty=oneline
ac2d70d95c63e856f284e3aa663adcb5e9c0c2df 関係ないコミット3
e778c654dd248936196724dd1787b0623aeba4ab 関係ないコミット2
16bb56ea998867f53522504a17cebe15271b384d xxx対応 その2
fc4564050e772e9a1338b4b5794793ad0829e1f0 関係ないコミット1
9d8466c81ab3614785457de4792f2cd2ca5e4b6a xxx対応1
ee804e6844eb75b8872b2a1497e1de55a4d8461e 関係ないコミット
(以下略)
git revert
を2回して、git rebase
すると。
$ git revert --no-edit 16bb56ea998867f53522504a17cebe15271b384d
$ git revert --no-edit 9d8466c81ab3614785457de4792f2cd2ca5e4b6a
$ git rebase -i HEAD~2
エディタが起動するので
pick 16bb56e Revert "xxx対応 その2"
pick 9d8466c Revert "xxx対応 その1"
の部分を
pick 16bb56e Revert "xxx対応 その2"
squash 9d8466c Revert "xxx対応 その1"
に変更してエディタを閉じると。
そうするとコミットできるようになるので、メッセージを適当に編集してコミット。
それからrevertした変更をもう一度適用したい場合は
git cherry-pick
すれば適用できるので次のような感じで。
$ git cherry-pick 9d8466c81ab3614785457de4792f2cd2ca5e4b6a
$ git cherry-pick 16bb56ea998867f53522504a17cebe15271b384d
例えばmasterに一度mergeしたんだけどタイミングをやっぱり遅らせたいときとか、
別ブランチに移したいときとかに使うと便利、かもしれない。