別 PR で機能を取り込んだりしたマージコミットのあるブランチでマージコミットを残したまま rebase したい時のメモ
git rebase -i
だとマージコミットが消えてしまう
e.g.
$ git log --graph --oneline * f3084e4 (HEAD -> master) 時はきた! * defc249 ねこいいよね * 3864499 (origin/master) Merge pull request #1 from Mikan/wow |\ | * 99fb7bd (origin/wow, wow) まちカドまぞく2期決定 |/ * 22301d8 千代田もも * af375c9 シャミ子
$ git rebase -i af375c9
👇 merge commit が表示されない
pick 22301d8 千代田もも pick 99fb7bd まちカドまぞく2期決定 pick defc249 ねこいいよね pick f3084e4 時はきた! # Rebase af375c9..f3084e4 onto f3084e4 (4 commands)
rebase が完了すると merge commit が消えた履歴になる
$ git log --graph --oneline * 7817181 (HEAD -> master) 時はきた! * 82e603d ねこいいよね * ca3fc82 まちカドまぞく2期決定 * d4132d0 桃色魔法少女 * af375c9 シャミ子
マージコミットを残したい時は -p
( --preserve-merges ) オプションを使用する
$ git rebase -i -p af375c9
👇 merge commit も表示される
pick 22301d8 千代田もも pick 99fb7bd まちカドまぞく2期決定 pick 3864499 Merge pull request #1 from Mikan/wow pick defc249 ねこいいよね pick f3084e4 時はきた! # Rebase af375c9..f3084e4 onto af375c9 (5 commands)
rebase しても merge commit が維持される
$ git log --graph --oneline * 7817181 (HEAD -> master) 時はきた! * 82e603d ねこいいよね * 8689d15 Merge pull request #1 from Mikan/wow |\ | * ca3fc82 まちカドまぞく2期決定 |/ * d4132d0 桃色魔法少女 * af375c9 シャミ子
マージされたコミットのブランチ名などは失われてしまうようですが、 merge commit を維持したまま rebase することができました。歴史改竄のテクニックをまた一つ覚えてしまった。そもそも merge commit を挟んで rebase する必要が出ないように気をつけるべきだとは思いますが…
[参考]

- 作者:TravisSwicegood,でびあんぐる
- 発売日: 2017/07/15
- メディア: Kindle版
まちカドまぞく2期嬉しい!