Matthew Scharley Matthew Scharley - 4 months ago 9
Git Question

How to avoid git rebase killing merge commits?

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

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.