# Shell completion for branch names

3 messages from 2021-04-07 to 2021-04-07. Participants: jost.schulte@tutanota.com, Junio C Hamano, Jeff King.
Thread: https://gitlist.dev/t/55446

## jost.schulte@tutanota.com, 2021-04-07 14:23

Subject: Shell completion for branch names
Message-ID: <MXghkzC----2@tutanota.com>
URL: https://gitlist.dev/e/MXghkzC----2%40tutanota.com

```
Hello guys,

I have a question regarding git-completion. I'm using zsh and have added the function .git-completion.bash. That gives me some auto-completion for branch names.

What I'm looking for: I have a branch named "feature/issue-123-add-feature" for example. I'd like to type "git switch 123[tab]". Is there some function out there that provides this?

Cheers
Jost


```

## Junio C Hamano, 2021-04-07 19:52

Subject: Re: Shell completion for branch names
Message-ID: <xmqqr1jlzxc5.fsf@gitster.g>
URL: https://gitlist.dev/e/xmqqr1jlzxc5.fsf%40gitster.g
In-Reply-To: <MXghkzC----2@tutanota.com>

```
jost.schulte@tutanota.com writes:

> I have a question regarding git-completion. I'm using zsh and have
> added the function .git-completion.bash. That gives me some
> auto-completion for branch names.
>
> What I'm looking for: I have a branch named
> "feature/issue-123-add-feature" for example. I'd like to type "git
> switch 123[tab]". Is there some function out there that provides
> this?

I am not an area expert for shell completion, but as a mere user,
unless the shell completion in a directory where I have README.txt
file, responds to

    $ cat EAD<TAB>

and completes the request to

    $ cat README.txt

I would find such a behaviour quite confusing.

On the other hand if

    $ git log feat<TAB>

expands to

    $ git log feature/issue-

then another <TAB> after that would offer 123-add-feature and 143-fix
as candidates, or instead of <TAB> if I type "123<TAB>" and get it
expanded to the full feature/issue-123-add-feature, then I wouldn't
find it confusing or unnatural.

```

## Jeff King, 2021-04-07 20:00

Subject: Re: Shell completion for branch names
Message-ID: <YG4PccicS0eH9gKG@coredump.intra.peff.net>
URL: https://gitlist.dev/e/YG4PccicS0eH9gKG%40coredump.intra.peff.net
In-Reply-To: <MXghkzC----2@tutanota.com>

```
On Wed, Apr 07, 2021 at 04:23:16PM +0200, jost.schulte@tutanota.com wrote:

> I have a question regarding git-completion. I'm using zsh and have
> added the function .git-completion.bash. That gives me some
> auto-completion for branch names.
> 
> What I'm looking for: I have a branch named
> "feature/issue-123-add-feature" for example. I'd like to type "git
> switch 123[tab]". Is there some function out there that provides this?

Generally completion is done left-to-right for a partial string. The
thing you are asking about is usually called "fuzzy" completion. You can
use that term to find some discussion and tools that may help (e.g.,
[1]). I don't use any myself, so I can't comment on the quality.

I'm also not sure if they can be used with custom completions like the
one Git provides. One of the things Git's completion code does is
turning those partial strings into a full set of options. In theory a
fuzzy completion system could just feed Git's completion code an empty
string to get all possibilities, and then do its own fuzzy match against
it. But again, I don't know if anybody has written the glue code to do
that kind of thing.

-Peff

[1] https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh

```
