Re: [PATCH 1/1] Add --first-parent support to interactive rebase.
- From
Björn Steinbrink <b.steinbrink@gmx.de>
- Date
- Oct 31, 2007, 05:53 UTC
- Message-ID
- <20071031055303.GB3326@atjola.homenet>
- In-Reply-To
- <7vodefj2lk.fsf@gitster.siamese.dyndns.org>
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)
Show 13 quoted lines
> Björn Steinbrink <B.Steinbrink@gmx.de> writes: > > > 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:
> > ---H------I topicB > > / \ \ > > ... > > does no longer become:
Which results in:
Show 7 quoted lines
> > -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:
> > A---B---C master > > ... > > ---------H---------I topicB
When you do "git-rebase -p -i --first-parent master topicA"
That's better, right?
Show 8 quoted lines
> 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 trunkNow 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 trunkThe 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