Thread (14 messages) flat view 14 messages, 7 authors, 2016-06-15

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help