Aqui está a fonte da mensagem de erro:
$ git log %ad
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
Você receberá a mesma mensagem de erro dos dois comandos a seguir:
$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
$ git log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
O problema é que git log
recebe os dois argumentos a seguir: --pretty=format:%h
(ou --pretty=format:\"%h
) e %ad
. O resto, pelo menos quando executado diretamente como um comando no bash, é um pipe para o comando %s%d
, que normalmente não existe. A mensagem de erro completa no meu sistema é assim:
$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
bash: %s%d: command not found
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
Tudo isso demonstra que a citação de alguma forma se perdeu e %ad
é interpretado como um parâmetro para o git log. Para evitar que você tenha que encontrar a combinação correta de cotação e escape para que a string de formato seja citada corretamente no momento da execução.
O manual do git config sobre alias e citações:
Arguments are split by spaces, the usual shell quoting and escaping is supported. quote pair and a backslash can be used to quote them.
A partir desta linha, não consegui descobrir como funciona a citação e a fuga. Eu tentei uma combinação de citar e escapar no pseudônimo, mas não consegui fazer nenhum sentido.
As seguintes linhas que você postou em sua pergunta funcionam bem no meu sistema:
[alias]
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
Você terá que experimentar para obter a combinação certa em seu sistema enquanto estiver usando o PuTTY e tudo mais.