threads / discuss / 25763

Difference between 'git rebase' and 'git rebase -m'

Subject: Difference between 'git rebase' and 'git rebase -m'

## tl;dr

5 messages between Nov 16, 2010 and Nov 17, 2010.

replies: 4people: 4as markdown or json

Joshua Jensen· Nov 16, 2010, 17:35 UTC · lore
We ran into an interesting issue yesterday during a rebase.

User Bob had added a line at the same place in a (C++) .h file as User Joe, who had already pushed his one line change. The natural expectation would be a conflict during User Bob's rebase operation, but, in fact, the conflicting patch applied without difficulty.

After an investigation, we discovered this particular file had a near duplicate of its C++ class definition immediately following the original but renamed into a thread-safe version; the rename of the class was the only change to its contents. The default 'git rebase' operation looked some 150 lines into the file, discovered the patch didn't match due to User Joe's added line, continued scanning the file until it found another matching location some 300 lines later (the near duplicate thread-safe version of the class), and applied the patch there.

While coming up with a repro to post here, we cherry picked the individual changes and found the cherry pick properly conflicted.

We further discovered 'git rebase -m' (or 'git rebase -s recursive') also conflicted at the User Bob/Joe modification.

I can post a repro here, if needed.

I'm curious as to why 'git rebase -m' isn't the default and what the real difference is between 'git rebase' and 'git rebase -m'. Additionally, is there any documentation describing how the patch algorithm determines context?

Thanks!
Josh
Jonathan Nieder· Nov 16, 2010, 18:27 UTC · re: Joshua Jensen · lore

Re: Difference between 'git rebase' and 'git rebase -m'

Joshua Jensen wrote:
> I'm curious as to why 'git rebase -m' isn't the default and what the
> real difference is between 'git rebase' and 'git rebase -m'.
git rebase is faster. :)

git rebase works by formatting a patch series and applying it. git rebase -m uses repeated 3-way merge and should be more robust.

Nguyen Thai Ngoc Duy· Nov 17, 2010, 11:43 UTC · re: Jonathan Nieder · lore

Re: Difference between 'git rebase' and 'git rebase -m'

On Wed, Nov 17, 2010 at 1:27 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:
Show 6 quoted lines
> Joshua Jensen wrote:
>
>> I'm curious as to why 'git rebase -m' isn't the default and what the
>> real difference is between 'git rebase' and 'git rebase -m'.
>
> git rebase is faster. :)

Perhaps a config option to let people to default to -m. Or perhaps they can just make an alias.

By the way, can we make rebase even faster? Rebasing ~20 patches or more seems slow to me. I don't know much how patching works though.

-- 
Duy
Michael J Gruber· Nov 17, 2010, 13:36 UTC · re: Nguyen Thai Ngoc Duy · lore

Re: Difference between 'git rebase' and 'git rebase -m'

Nguyen Thai Ngoc Duy venit, vidit, dixit 17.11.2010 12:43:
Show 13 quoted lines
> On Wed, Nov 17, 2010 at 1:27 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:
>> Joshua Jensen wrote:
>>
>>> I'm curious as to why 'git rebase -m' isn't the default and what the
>>> real difference is between 'git rebase' and 'git rebase -m'.
>>
>> git rebase is faster. :)
> 
> Perhaps a config option to let people to default to -m. Or perhaps
> they can just make an alias.
> 
> By the way, can we make rebase even faster? Rebasing ~20 patches or
> more seems slow to me. I don't know much how patching works though.
git sequencer...
Michael
Nguyen Thai Ngoc Duy· Nov 17, 2010, 14:38 UTC · re: Michael J Gruber · lore

Re: Difference between 'git rebase' and 'git rebase -m'

On Wed, Nov 17, 2010 at 8:36 PM, Michael J Gruber <git@drmicha.warpmail.net> wrote:

Show 16 quoted lines
> Nguyen Thai Ngoc Duy venit, vidit, dixit 17.11.2010 12:43:
>> On Wed, Nov 17, 2010 at 1:27 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:
>>> Joshua Jensen wrote:
>>>
>>>> I'm curious as to why 'git rebase -m' isn't the default and what the
>>>> real difference is between 'git rebase' and 'git rebase -m'.
>>>
>>> git rebase is faster. :)
>>
>> Perhaps a config option to let people to default to -m. Or perhaps
>> they can just make an alias.
>>
>> By the way, can we make rebase even faster? Rebasing ~20 patches or
>> more seems slow to me. I don't know much how patching works though.
>
> git sequencer...

Sequencer is definitely an improvement. But does it improve performance? I don't know rebase internals but I think that it needs to update worktree/index for every commit, which might slow things down a bit.

-- 
Duy

← back to recent threads