Para ejecutar comandos dentro de un alias de git, y en particular para pasar argumentos a esos comandos, probablemente tendrá que crear una función temporal que luego invocará inmediatamente:
$ vim ~/.gitconfig
...
[alias]
foo = "! echo begin arg=$1/$2/end"
foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
En este ejemplo, la función es probablemente lo que necesita (y también es más flexible en cuanto a lo que puede hacer en una sola "declaración"); y probablemente pueda decir que para ambas opciones, los argumentos restantes del comando git simplemente se pasan como argumentos al alias, independientemente de si es "echo" o "f"; invocar la función simplemente consume los argumentos, ignorando lo que no se usa explícitamente:
$ git foo a b c
begin arg=a/b/end a b c
$ git foo2 a b c
begin arg=a/b/end
Otro ejemplo (enumera todos los alias, según el patrón coincidente) (nota: puede seguir reutilizando el mismo nombre de función "f ()" en todo el .gitconfig):
[alias]
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
El primero devuelve el alias solo para "foo $", el segundo para "foo. *":
$ git alias foo
alias.foo ! echo begin arg=$1/$2/end
$ git alias 'foo.*'
alias.foo ! echo begin arg=$1/$2/end
alias.foo2 !f() { echo begin arg=$1/$2/end; }; f
(nb: los resultados reales pueden variar según el shell; estoy usando esto con bash en Linux, Unix y Cygwin (Windows)).