threads / discuss / 25428

rebase converts merge commits

Subject: rebase converts merge commits

## tl;dr

5 messages between Oct 12, 2010 and Oct 17, 2010.

replies: 4people: 3as markdown or json

Sébastien Barthélemy· Oct 12, 2010, 14:55 UTC · lore
Hello,
first of all, thank you for git this is a wonderful tool.

Yet, I have a problem while trying to rebase a bit of history which contains merge commits.

I'm not sure whether I misuse something or whether this is a know (but not documented?) limitation.

Here is more context.
I have the following history
* commit e1adb4bcd07372024689c697c56249ca6c044009
|
|     fixed  maintainer field
|
* commit 6aca4f53e8b7647df96dcd2caacde5883f9c67c5
|
|     updated changelog for release 2.9.9-0ubuntu1
|
* commit 96d69d992afae69a8caba07ab9b5b6e5ed7d35d8
|
|     updated lintian warning override
|
*   commit 53171e21222b6a7fcb25620b1c30e427b9ada6a6
|\  Merge: 2d58bfe 4f3385d
| |
| |     merged release 2.9.9
| |
| * commit 4f3385dd9cf129cb0d65c9fb3895fe61a03b8b59
| |
| |     upstream 2.9.9 (developer) release
| |
* | commit 2d58bfed1cc234b5a76bde8216298a72db29aacc
| |
| |     updated maintainer field
| |
* | commit 05b4de27b993dde0cc779364fa24223f29e66b0e
| |
| |     changelog for 2.9.8-0ubuntu5
| |
...
commit 2d58bfe introduced a trivial error that got fixed in commit e1adb4b.

I would like to manipulate the history to get these two commits subsequent (or even merge them). Eventually I'd like to get this history

* commit 6aca4f53e8b7647df96dcd2caacde5883f9c67c5'
|
|     updated changelog for release 2.9.9-0ubuntu1
|
* commit 96d69d992afae69a8caba07ab9b5b6e5ed7d35d8'
|
|     updated lintian warning override
|
*   commit 53171e21222b6a7fcb25620b1c30e427b9ada6a6'
|\  Merge: e1adb4' 4f3385d
| |
| |     merged release 2.9.9
| |
| * commit 4f3385dd9cf129cb0d65c9fb3895fe61a03b8b59
| |
| |     upstream 2.9.9 (developer) release
| |
* | commit e1adb4bcd07372024689c697c56249ca6c044009'
| |
| |     fixed  maintainer field
| |
* | commit 2d58bfed1cc234b5a76bde8216298a72db29aacc
| |
| |     updated maintainer field
| |
* | commit 05b4de27b993dde0cc779364fa24223f29e66b0e
| |
| |     changelog for 2.9.8-0ubuntu5
| |
...

I tried with rebase -i, but it converts the merge commit into a normal commit. Moreover, it asks me to resolve the merge conflict again.

I think this is a limitation of rebase, but I haven't read it stated anywhere, so here I am, asking for a confirmation.

By the way, if there is a way to do what I want, please tell me.
I'm using git version 1.7.0.4.
Cheers
-- 
Sebastian
Sébastien Barthélemy· Oct 12, 2010, 15:23 UTC · re: Matthijs Kooijman · lore

Re: rebase converts merge commits

Hi Matthijs,
2010/10/12 Matthijs Kooijman <matthijs@stdin.nl>:
> Have you tried the --preserve-merges option to rebase?
No, I didn't know about this option. Thank you for the tip.

I just tried, and it does not work either. The merge commit is preserved, but the commit I'm push back in time is lost.

There is a warning against this kind behaviour when using both --interactive and rebase.

Thanks,
-- 
Sebastian
Kevin Ballard· Oct 12, 2010, 20:27 UTC · re: Sébastien Barthélemy · lore

Re: rebase converts merge commits

On Oct 12, 2010, at 7:55 AM, Sébastien Barthélemy wrote:
> By the way, if there is a way to do what I want, please tell me.
Your history is short enough that if you can't get rebase to do what you want, you could always do it by hand. Create a temp branch to work on based on the bad commit, cherry-pick the good commit with --no-commit, then amend the bad commit. Then just cherry-pick each subsequent commit until you get to the merge. Re-perform the merge. Then just continue to cherry-pick subsequent commits. It's not ideal, but it should work.
-Kevin Ballard
Sébastien Barthélemy· Oct 17, 2010, 08:04 UTC · re: Kevin Ballard · lore

Re: rebase converts merge commits

2010/10/12 Kevin Ballard <kevin@sb.org>:
Show 5 quoted lines
> On Oct 12, 2010, at 7:55 AM, Sébastien Barthélemy wrote:
>
>> By the way, if there is a way to do what I want, please tell me.
>
> Your history is short enough that if you can't get rebase to do what you want, you could always do it by hand.
Sure. Thank you for making it clear.

← back to recent threads