On Wed, Aug 29, 2018 at 02:03:34PM -0700, Junio C Hamano wrote: > Andreas Gruenbacher <agruenba@xxxxxxxxxx> writes: > > > Some commands like 'log' default to HEAD if no other revisions are > > specified on the command line or otherwise. Unfortunately, excludes > > (^<rev>) cancel out that default, so when a command only excludes > > revisions (e.g., 'git log ^origin/master'), the command will not produce > > any result. > > > > If all the specified revisions are excludes, it seems more useful to > > stick with the default revision instead. > > > > This makes writing wrappers that exclude certain revisions much easier: > > for example, a simple alias l='git log ^origin/master' will show the > > revisions between origin/master and HEAD by default, and 'l foo' will > > show the revisions between origin/master and foo, as you would usually > > expect. > > That is a _huge_ departure from the behaviour established for the > past 10 years, but it would certainly be more useful. > > As long as we can prove that that a command line with only negative > revs is absolutely useless, the backward incompatibility may be OK > to swallow, especially for commands like "git log" that implicitly > use "--default HEAD", as they are meant for human consumption, and > not for scripts. > > I am not offhand 100% sure that a rev list with only negative revs > is totally useless, though. Yeah, I'm uneasy that somebody is relying on the current behavior, especially for scripting where we often do something like: git rev-list $new --not --all and an empty $new really should return an empty result (that's our usual connectivity check, but I'd imagine some pre-receive hooks may end up doing similar things). For rev-list I think you'd have to specify --default to trigger this behavior, so that helps. But it still makes me nervous. I'm _less_ uneasy with it for git-log, though I think people do have a habit of scripting around it (because it knows some tricks that rev-list doesn't). Given that the mentioned use case was writing wrappers, could we hide this behind: git config alias.l 'git log --default-on-negative ^origin/master' That's obviously less convenient to type, but I think it would usually be part of scripted calls (otherwise you'd know already that you have no positive refs and would just add ".." or HEAD or whatever). -Peff