How to avoid git rebase killing merge commits?

Matthew Scharley picture Matthew Scharley · Jun 3, 2011 · Viewed 7.6k times · Source

Given the following git history:

    C-I    origin/master
   /
A-B-F-G-H  master
 \   /
  D-E      branch-b

I want to rebase my local master branch on top of origin/master, but I want to preserve the merge commit G. When I tried simply doing a git rebase origin/master while at master it squashed D..E as G and committed that with the commit message of E, so the history that there was a merge was lost. Is there some way of preserving this merge while still getting the rebase? For clarity, my intended result is:

A-B-C-I-F-G-H  master
 \       /
  D-----E      branch-b

Answer

Adam Dymitruk picture Adam Dymitruk · Jun 3, 2011

Add --preserve-merges to your rebase command. In case there were conflict resolutions in your merge, add 'recursive theirs' strategy as a parameter as well.

EDIT: --preserve-merges is now deprecated, use --rebase-merges instead