Se você usar parâmetros posicionais nos aliases do git, especifique sh -c
. O seguinte trabalhou para mim localmente:
ff = !sh -c 'git checkout master && git merge "$1" && git checkout "$1"' -
O "porquê" está relacionado à maneira como o git analisa os comandos alias e é resumido neste tópico gmane .
O -
no final do comando sinaliza sh
que o processamento da opção está concluído. De man sh
:
A -- signals the end of options and disables further option processing. Any arguments after the -- are treated as filenames and arguments. An argument of - is equivalent to --.
Se ele não estivesse presente, ele introduziria um erro no alias, tratando $1
como uma opção no comando sh
em vez de como um argumento posicional. Considere este exemplo trivial:
$ sh -c 'echo $1' foo # equivalent to 'echo' without argument
$ sh -c 'echo $1' - foo # will pass 'foo' to the string as $1
foo
No primeiro caso, 'foo' foi consumido por sh
como uma opção. No segundo, é corretamente interpretado como $1
na string.