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 restante, pelo menos quando executado diretamente como um comando no bash, é um canal para o comando %s%d
, que geralmente 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
é interpretada como um parâmetro para o git log. Para impedir que você precise encontrar a combinação correta de citação e escape para que a seqüência de formato seja citada corretamente no momento da execução.
O manual de configuração do git sobre alias e citação:
Os argumentos são divididos por espaços, o shell usual citando e escapando é suportado. um par de aspas e uma barra invertida podem ser usados para citá-los.
A partir dessa linha, não consegui descobrir como funciona a citação e a fuga. Tentei alguma combinação de citação e escape no pseudônimo, mas não consegui entender nada disso.
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 no seu sistema enquanto estiver usando o PuTTY e tudo.
[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'