threads / discuss / 16207

[minor usability suggestion] git rebase <upstream> --onto <newbase> ?

Subject: [minor usability suggestion] git rebase <upstream> --onto <newbase> ?

## tl;dr

5 messages between Nov 7, 2008 and Nov 8, 2008.

replies: 4people: 3as markdown or json

Ingo Molnar· Nov 7, 2008, 09:20 UTC · lore

I use git rebase rarely, but i just had one of those exceptions where it's OK to use it: wanted to zap an unsafe commit [685aebb below] from a short-lifetime topic branch. With that i had this small usability incident:

 earth4:~/tip> tc
 tip/core/urgent 82d4e6e: xen: make sure stray alias mappings are gone
 earth4:~/tip> git rebase 685aebb --onto linus
 Current branch core/urgent is up to date.
 earth4:~/tip> glll
 82d4e6e: xen: make sure stray alias mappings are gone before pinning
 f6ab176: vmap: cope with vm_unmap_aliases before vmalloc_init()
 685aebb: kernel/cpu.c: section mismatch warning fix
 earth4:~/tip> git rebase --onto linus 685aebb
 First, rewinding head to replay your work on top of it...
 Applying: vmap: cope with vm_unmap_aliases before vmalloc_init()
 Applying: xen: make sure stray alias mappings are gone before pinning
 earth4:~/tip> glll
 d05fdf3: xen: make sure stray alias mappings are gone before pinning
 9b46333: vmap: cope with vm_unmap_aliases before vmalloc_init()
 earth4:~/tip> tc
 tip/core/urgent d05fdf3: xen: make sure stray alias mappings are gone 
 earth4:~/tip> git version
 git version 1.6.0.2.GIT

What i tried to achieve was to zap a single commit that was applied first, and preserve the other two commits - without having to go via the longer "git rebase -i" path.

It took me some time to figure out that while the principle i applied was correct, the first rebase command didnt work because i mistakenly flipped around the "--onto <newbase> <upstream>" arguments to "<upstream> --onto <newbase>".

Unless the reverse order is meaningful and important, it might make sense to flip it back implicitly and thus accept that order as well transparently.

For example "git log" is exemplary in this area as it accepts just about any permutation of parameters thrown at it, and i love that aspect of Git commands in general, it's a really nice property.

Or at least we should print some sort of warning/error? The "Current branch core/urgent is up to date." message definitely did not help me in noticing my mistake.

	Ingo
Junio C Hamano· Nov 7, 2008, 18:23 UTC · re: Ingo Molnar · lore

Re: [minor usability suggestion] git rebase <upstream> --onto <newbase> ?

Ingo Molnar <mingo@elte.hu> writes:
Show 5 quoted lines
>  earth4:~/tip> git rebase 685aebb --onto linus
>  Current branch core/urgent is up to date.
> ...
> For example "git log" is exemplary in this area as it accepts just 
> about any permutation of parameters thrown at it, ...
Not really.

There may be oddball commands whose parameter order have been established differently long before "git log" came, but almost all of them now use the same convention used by the "git log" family, which is flags/options then revs (and then paths if the operation makes sense with paths). And rebase is not one of the oddball ones.

Your "rebase" example is a rev then a flag/option, which is not how any other git command take its command line parameters.

> Or at least we should print some sort of warning/error?
With that I agree with.  Patches? ;-)
Daniel Barkalow· Nov 7, 2008, 20:10 UTC · re: Junio C Hamano · lore

Re: [minor usability suggestion] git rebase <upstream> --onto <newbase> ?

On Fri, 7 Nov 2008, Junio C Hamano wrote:
Show 18 quoted lines
> Ingo Molnar <mingo@elte.hu> writes:
> 
> >  earth4:~/tip> git rebase 685aebb --onto linus
> >  Current branch core/urgent is up to date.
> > ...
> > For example "git log" is exemplary in this area as it accepts just 
> > about any permutation of parameters thrown at it, ...
> 
> Not really.
> 
> There may be oddball commands whose parameter order have been established
> differently long before "git log" came, but almost all of them now use the
> same convention used by the "git log" family, which is flags/options then
> revs (and then paths if the operation makes sense with paths).  And rebase
> is not one of the oddball ones.
> 
> Your "rebase" example is a rev then a flag/option, which is not how any
> other git command take its command line parameters.

"git log origin/master -p" works, though. It's paths, not revisions, that can't appear before options (or revisions).

	-Daniel
*This .sig left intentionally blank*
Ingo Molnar· Nov 8, 2008, 11:49 UTC · re: Junio C Hamano · lore

Re: [minor usability suggestion] git rebase <upstream> --onto <newbase> ?

* Junio C Hamano <gitster@pobox.com> wrote:
Show 5 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes:
> 
> > "git log origin/master -p" works, though.
> 
> That's an accident.  Do not rely on it.

hm, i frequently rely on tacking-on options after the fact, especially the -- ones.

Just like the best workflow is append-mostly, command parameters are often added append-only as well, without jumping back and forth in the command line to edit the command.

Path or brach names starting with '--' are weird anyway, so isnt this a reasonable expectation? I hope i'm not misunderstanding something here.

	Ingo

← back to recent threads