Re: [PATCH 1/1] Add --first-parent support to interactive rebase.
From: Björn Steinbrink <hidden>
Date: 2016-06-15 22:43:45
On 2007.10.30 22:05:27 -0700, Junio C Hamano wrote:
Your MUA seems to mark the UTF-8 message you are sending out as 8859-1, which means your name in the message gets corrupt.
Hm, that would be git-send-email then, anything I need to configure? (Actually I don't see it marking the message as anything)
Björn Steinbrink [off-list ref] writes:quoted
By default, rebase will take all commits from the branch that is to be rebased which are missing in upstream. The new --first-parent option allows to just follow the first parent and thus completely ignore merges. Additionally, when used together with --preserve-merges (which is the more useful use-case) it will no longer rebase the commits from the merged-in branches, but instead redo the merge with the original parents. That means that:
Given this situation:
quoted
---H------I topicB / \ \ ... does no longer become:
Which results in:
quoted
-H'--------I' / \ \ D'---E'---F'---G' topicA / A---B---C master \ H---I topicB
When you do "git-rebase -p -i master topicA" You can now also get:
quoted
A---B---C master ... ---------H---------I topicB
When you do "git-rebase -p -i --first-parent master topicA" That's better, right?
And crucially, you forgot to say "... when you do X".
I am assuming that you meant:
This (picture) becomes this (picture) instead of this (picture)
when you run "git rebase -p -m master topicA".
but without it, the nice ASCII drawings loses their value.:-/
It is somewhat disturbing that this treats the first parent too special.
The original use-case for the "-p -i --first-parent" case was a question
on #git, where someone had sth. like this:
o---o---o---o---o remote/branch
\ \
o---o---o---o---o topicA
/
o---o---o master trunk
Now that guy was using git-svn to dcommit into svn from master. To
dcommit the changes from topicA he had to have that based on master, and
he wanted to preserve the merges from remote/branch to have them
squashed when dcommitted to svn. So what he wanted was:
...---o---o---o---o---o remote/branch
\ \
o---o---o---o---o topicA
/
o---o---o master trunk
The default behaviour of rebase would totally flat out the history and
instead of two sqaush merges (which he wanted), svn would've seen a huge
amount of commits comning from remote/branch. And the plain -p behaviour
would have duplicated all those branches from remote/branch for no good
reason, so I came up with that --first-parent thing.
Better ideas are welcome, I just don't know git well enough to come up
with anything better...
Thanks,
Björn