Re: [PATCH] Fix rebase -p --onto

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Johannes Sixt <j.sixt@xxxxxxxxxxxxx> writes:

> Greg Price schrieb:
>> In a rebase with --onto, the correct test for whether we can skip
>> rewriting a commit is if it is already on top of $ONTO, not $UPSTREAM.
>> Without --onto, this distinction does not exist and the behavior does
>> not change.
>> 
>> 
>> In the situation
>> 
>>  X---o---o---o---M
>>   \             /
>>    x---x---x---x
>> 
>>  Y
>> ...
>> The command `git rebase -p --onto Y X M` moves only the
>> first-parent chain, like so:
>> 
>>  X
>>   \
>>    x---x---x---x
>>                 \
>>  Y---o'--o'--o'--M'
>> 
>> because it mistakenly drops the other branch(es) x---x---x---x from
>> the TODO file.  This tests and fixes this behavior.
>
> I think the current behavior is by design. There is nothing to fix.
>
> The purpose of rebase -p is to leave non-first children alone and rebase
> only the first child parenthood chain. It is not the purpose to reseat an
> entire history DAG.

Hmm, if the original history were

 .---X---o---o---o---M
  \                 /
   x---x---x---x---x

     Y

and the rebase is about moving history leading to M since X on top of Y,
I would actually have agreed that this

 .---X---o---o---o---M
  \                 /
   x---x---x---x---x
                    \
     Y---o'--o'--o'--M'

would be the right thing to do (IOW, I would agree with you).

Can the current code distinguish the two cases?  More generally, can we
always tell these two cases apart, or is it fundamentally not possible to
differentiate the two cases and we should simplify the problem space by
limiting ourselves by treating the first parent in a special way?
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]