Subject: Re: [PATCH v2] completion: complete "git -<TAB>" with short options

From: SZEDER Gábor <[email-masked]>
Date: Thu, 27 Nov 2025 08:33:30 +0100

On Wed, Nov 26, 2025 at 12:09:22PM -0800, Junio C Hamano wrote:
> "Wiktor Mis via GitGitGadget" <[email-masked]> writes:
> 
> > From: Wiktor Mis <[email-masked]>
> >
> > "git" itself has completion for long options and cmds, but not short ones
> >
> > Signed-off-by: Wiktor Mis <[email-masked]>
> > ---
> >     Add completion for short options
> 
> Will queue with a slight update to the log message.  I am unsure if
> we want to limit "-<TAB>" to one-letter options or if we want to
> include the long ones (the latter is what v2 implements), but let's
> see if others have strong opinions.
> 
>     completion: complete "git -<TAB>" with short options
> 
>     "git" itself has completion for its long options and subcommands,
>     but not for its short options.  Add support for them.

It's not just git itself that doesn't have completion for its short
options, but the completion script in general doesn't complete the
short options for anything.  The reason being, I think, that it
doesn't save keystrokes and it doesn't really help discoverability
(Well, okay, strictly speaking it does help discoverability in the
sense that 'git -<TAB>' will show the existence of short options, but
since short options don't have self-explanatory names, the users won't
know what those short options are good for.  E.g. I just learned from
this patch that the main git command accepts -p and -P options, but I
have no idea what they are doing.)

So overall I'm somewhat negative on this patch and in general on the
direction it takes us, but if we do want to go in this direction, then
it will definitely need more justification than this.

>     Signed-off-by: Wiktor Mis <[email-masked]>
>     Signed-off-by: Junio C Hamano <[email-masked]>
> 
> Thanks.
> 
> >  contrib/completion/git-completion.bash | 8 +++++++-
> >  1 file changed, 7 insertions(+), 1 deletion(-)
> >
> > diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> > index 73abea31b4..1705ca3323 100644
> > --- a/contrib/completion/git-completion.bash
> > +++ b/contrib/completion/git-completion.bash
> > @@ -3898,7 +3898,7 @@ __git_main ()
> >  			;;
> >  		esac
> >  		case "$cur" in
> > -		--*)
> > +		-*)
> >  			__gitcomp "
> >  			--paginate
> >  			--no-pager
> > @@ -3914,6 +3914,12 @@ __git_main ()
> >  			--namespace=
> >  			--no-replace-objects
> >  			--help
> > +			-C
> > +			-P
> > +			-c
> > +			-h
> > +			-p
> > +			-v
> >  			"
> >  			;;
> >  		*)
> >
> > base-commit: fd372d9b1a69a01a676398882bbe3840bf51fe72