Aquí está la fuente del mensaje de error:
$ git log %ad
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
Recibirá el mismo mensaje de error de los dos comandos siguientes:
$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
$ git log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
El problema es que git log
recibe los siguientes dos argumentos: --pretty=format:%h
(o --pretty=format:\"%h
) y %ad
. El resto, al menos cuando se ejecuta directamente como un comando en bash, es una tubería hacia el comando %s%d
, que generalmente no existe. El mensaje de error completo en mi sistema se ve así:
$ 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
Todo esto demuestra que la cita de alguna manera se perdió y %ad
se interpreta como un parámetro para git log. Para evitar que tenga que encontrar la combinación correcta de comillas y escapes para que la cadena de formato se cite correctamente en el momento de la ejecución.
El manual de configuración de git sobre alias y citas:
Los argumentos están divididos por espacios, se admite el uso de comillas y escapes habituales. par de comillas y una barra invertida se pueden utilizar para citarlos.
Desde esta línea no pude entender cómo funcionan las citas y las escapadas. Intenté una combinación de citar y escapar en el alias, pero no pude entenderlo.
Las siguientes líneas que publicó en su pregunta funcionan bien en mi sistema:
[alias]
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
Tendrá que experimentar para obtener la combinación correcta en su sistema mientras usa PuTTY y todo.
[alias] lg = log --graph --pretty='format:%C(yellow)%h %Creset%s%Cred%d'