¿Cómo hacer que `git log –stat – <path>` muestre * todos * los files en commits seleccionados?

Cuando uso un argumento <path> con git log --stat para limitar el logging a commits modificando <path> , git enumera <path> como el único file modificado al mostrar las confirmaciones seleccionadas. En cambio, me gustaría ver todas las routes modificadas enumeradas para cada confirmación seleccionada.

Por ejemplo:

 $ echo test > a.txt $ echo test > b.txt $ git add a.txt b.txt $ git commit -m test [...] 2 files changed, 2 insertions(+), 0 deletions(-) [...] $ git log -n1 --stat [...] a.txt | 1 + b.txt | 1 + 2 files changed, 2 insertions(+), 0 deletions(-) $ git log -n1 --stat -- a.txt [...] a.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) 

Tenga en count que el segundo git log , con el argumento de ruta a.txt , dice "1 file cambiado", cuando en realidad "2 files cambiaron". Me gustaría que a.txt me diga que tanto a.txt como b.txt cambiado, aunque he seleccionado la confirmación basada en la ruta a.txt .

ACTUALIZACIÓN: @jacknagel respondió mi pregunta, pero resulta que su solución no funciona en mi caso de uso real. En mi caso de uso real, estoy buscando todas las confirmaciones que modificaron un file, incluidos los cambios de nombre, en un caso en que dos proyectos relacionados divergieron. Necesito descubrir qué cambios en un proyecto implican cambios correspondientes (tengo que hacer) en el otro proyecto. Desafortunadamente, git queja cuando trato de usar --full-diff y --follow al mismo time.

Entonces, en mi situación real, estoy tratando de correr:

 git log --stat --follow -- a.txt 

y una solución que funciona en este caso es:

 git log --format='%H' --follow -- a.txt | xargs git show --stat -C 

Puede get este comportamiento utilizando la opción --full-diff :

  --full-diff Without this flag, "git log -p <path>..." shows commits that touch the specified paths, and diffs about the same specified paths. With this, the full diff is shown for commits that touch the specified paths; this means that "<path>..." limits only commits, and doesn't limit diff for those commits. Note that this affects all diff-based output types, eg those produced by --stat etc. 

Primero encuentra los identificadores de commit, luego xargs a xargs (o gnu parallel ) para alimentar cada id a git show .

 git log --format='%H' --follow -- a.txt | xargs git show --stat -C 

En Windows con PowerShell, algo como esto debería funcionar (pero aún no lo he probado …):

 git log --format='%H' --follow -- a.txt | ForEach-Object { git show --stat -C $_ } 

¿Cómo espera que un command se comporte de una manera diferente a la prevista? Cuando le das el nombre de file le dices a git que obtenga los detalles de ese file solo. Si desea que muestre ambos files, utilice el command

 git log -n1 --stat . 

o

 git log -n1 --stat a.txt b.txt