git/list[1] front-page[2] threads[3] people[4] search[5] about
 

git rebase --preserve-merges seems to not work

From
Joshua Jensen <jjensen@workspacewhiz.com>
Date
Sep 9, 2010, 05:17 UTC
Message-ID
<4C886DF3.8050903@workspacewhiz.com>
  In order to push changes to our master branch, one has to have pulled 
first.  We pull with the --rebase option.  It works great except for 
merge commits.

I discovered 'git rebase' has a --preserve-merges option. I assumed it would allow me to rebase my merge commit on top of others' changes pushed to our central master branch.

Unfortunately, I can't seem to make it work. Does anyone have thoughts on what I'm doing wrong?

My session is below.
Thanks!
Josh
$ git init

$ echo a > a $ git add a $ git commit -m a $ git tag a

$ echo b > b $ git add b $ git commit -m b

$ echo c > c $ git add c $ git commit -m c $ git tag c

# Note the hierarchy is simple: a <- b <- c
$ git lg --all
* d132c87 - (c) c
* 4a88fd1 - b
* b576660 - (a) a
# Create the hierarchy: a <- d
$ git checkout a
Note: checking out 'a'.

$ echo d > d $ git add d $ git commit -m d $ git tag d

$ git lg --all
* 6abf527 - (HEAD, d) d
| * d132c87 - (c) c
| * 4a88fd1 - b
|/
* b576660 - (a) a
# Wanting to merge my branch back to my local master to push to the server.
$ git checkout a
$ git merge --no-ff c
Merge made by recursive.
  b |    1 +
  c |    1 +
  2 files changed, 2 insertions(+), 0 deletions(-)
  create mode 100644 b
  create mode 100644 c
$ git tag bc-merge
# Commit 'd' is something I would pull --rebase from the server before I 
push.
$ git lg --all
*   472fd93 - (HEAD, bc-merge) Merge commit 'c' into HEAD (3 seconds ago)
|\
| * d132c87 - (c) c (2 minutes ago)
| * 4a88fd1 - b (2 minutes ago)
|/
| * 6abf527 - (d) d (2 minutes ago)
|/
* b576660 - (a, master) a (3 minutes ago)

# Here is the rebase with the --preserve-merges option. $ git rebase --preserve-merges d Rebasing (n/3) Successfully rebased and updated detached HEAD.

# Of course, bc-merge is an orphaned branch.  Its changes got replayed 
on top of 'd'.
# Note the merge commit with the description "Merge commit 'c' into 
HEAD" is missing.
$ git lg --all
* 2c93a8a - (HEAD) c (11 seconds ago)
* 2b98bc6 - b (11 seconds ago)
* 6abf527 - (d) d (3 minutes ago)
| *   472fd93 - (bc-merge) Merge commit 'c' into HEAD (74 seconds ago)
| |\
|/ /
| * d132c87 - (c) c (3 minutes ago)
| * 4a88fd1 - b (3 minutes ago)
|/
* b576660 - (a, master) a (4 minutes ago)
Next: Björn Steinbrink
Message 1 of 3 in “git rebase --preserve-merges seems to not work”
  1. Joshua JensenSep 9, 2010
  2. Björn SteinbrinkSep 9, 2010
  3. Joshua JensenSep 9, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.