# [PATCH] completion: add stash import, export

2 messages from 2026-02-07 to 2026-02-08. Participants: D. Ben Knoble, Junio C Hamano.
Thread: https://gitlist.dev/t/64939

## D. Ben Knoble, 2026-02-07 21:59

Subject: [PATCH] completion: add stash import, export
Message-ID: <20260207215924.28863-1-ben.knoble+github@gmail.com>
URL: https://gitlist.dev/e/20260207215924.28863-1-ben.knoble%2Bgithub%40gmail.com

```
These newer commands lack completion; implement basic support for
options and arguments.

Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
---

Notes (benknoble/commits):
    - t/t9902-completion.sh passes
    - advice on completing the --to-ref argument welcome, but I also think
      it's acceptable to not offer any completion there
    
    I happened to build this off of next, but it applies cleanly to master
    (which is probably the most appropriate base).

 contrib/completion/git-completion.bash | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 538dff1ee5..a8e7c6ddbf 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -3465,7 +3465,7 @@ _git_sparse_checkout ()
 
 _git_stash ()
 {
-	local subcommands='push list show apply clear drop pop create branch'
+	local subcommands='push list show apply clear drop pop create branch import export'
 	local subcommand="$(__git_find_on_cmdline "$subcommands save")"
 
 	if [ -z "$subcommand" ]; then
@@ -3491,6 +3491,9 @@ _git_stash ()
 	show,--*)
 		__gitcomp_builtin stash_show "$__git_diff_common_options"
 		;;
+	export,--*)
+		__gitcomp_builtin stash_export "--print --to-ref"
+		;;
 	*,--*)
 		__gitcomp_builtin "stash_$subcommand"
 		;;
@@ -3502,7 +3505,10 @@ _git_stash ()
 					| sed -n -e 's/:.*//p')"
 		fi
 		;;
-	show,*|apply,*|drop,*|pop,*)
+	import,*)
+		__git_complete_refs
+		;;
+	show,*|apply,*|drop,*|pop,*|export,*)
 		__gitcomp_nl "$(__git stash list \
 				| sed -n -e 's/:.*//p')"
 		;;

base-commit: 2a3d6836805534f45cf545da7be25ce1c759c514
-- 
2.52.0.rc0.971.g305ecc6b61.dirty


```

## Junio C Hamano, 2026-02-08 01:33

Subject: Re: [PATCH] completion: add stash import, export
Message-ID: <xmqqpl6g9fyu.fsf@gitster.g>
URL: https://gitlist.dev/e/xmqqpl6g9fyu.fsf%40gitster.g
In-Reply-To: <20260207215924.28863-1-ben.knoble+github@gmail.com>

```
"D. Ben Knoble" <ben.knoble+github@gmail.com> writes:

> These newer commands lack completion; implement basic support for
> options and arguments.
>
> Signed-off-by: D. Ben Knoble <ben.knoble+github@gmail.com>
> ---
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 538dff1ee5..a8e7c6ddbf 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -3465,7 +3465,7 @@ _git_sparse_checkout ()
>  
>  _git_stash ()
>  {
> -	local subcommands='push list show apply clear drop pop create branch'
> +	local subcommands='push list show apply clear drop pop create branch import export'

Makes sense, but in the longer term, we should devise a way to make
this script and parse-options infrastructure cooperate so that we do
not have to update it, just like options are completed using the
special "git cmd --git-completion-helper" option.

In any case, will apply.  Thanks.

> @@ -3491,6 +3491,9 @@ _git_stash ()
>  	show,--*)
>  		__gitcomp_builtin stash_show "$__git_diff_common_options"
>  		;;
> +	export,--*)
> +		__gitcomp_builtin stash_export "--print --to-ref"
> +		;;
>  	*,--*)
>  		__gitcomp_builtin "stash_$subcommand"
>  		;;
> @@ -3502,7 +3505,10 @@ _git_stash ()
>  					| sed -n -e 's/:.*//p')"
>  		fi
>  		;;
> -	show,*|apply,*|drop,*|pop,*)
> +	import,*)
> +		__git_complete_refs
> +		;;
> +	show,*|apply,*|drop,*|pop,*|export,*)
>  		__gitcomp_nl "$(__git stash list \
>  				| sed -n -e 's/:.*//p')"
>  		;;
>
> base-commit: 2a3d6836805534f45cf545da7be25ce1c759c514

```
