gitエイリアス内でコマンドを実行するには、特にそれらのコマンドに引数を渡すには、一時関数を作成する必要があります。この関数をすぐに呼び出す必要があります。
$ vim ~/.gitconfig
...
[alias]
foo = "! echo begin arg=$1/$2/end"
foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"
この例では、関数はおそらく必要なものです(また、単一の「ステートメント」で実行できることに関してより柔軟です)。どちらのオプションでも、gitコマンドの残りの引数は、「echo」か「f」かに関係なく、単に引数としてエイリアスに渡されることがわかります。関数を呼び出すと、明示的に使用されていないものを無視して、単に引数が消費されます。
$ git foo a b c
begin arg=a/b/end a b c
$ git foo2 a b c
begin arg=a/b/end
別の例(一致するパターンに基づいてすべてのエイリアスを一覧表示します)(注:.gitconfig全体で同じ関数名 "f()"を再利用し続けることができます):
[alias]
alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"
1つ目は「foo $」のエイリアスを返し、2つ目は「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:実際の結果はシェルによって異なる場合があります。Linux、Unix、Cygwin(Windows)のbashでこれを使用しています。)