Parece que ainda é um problema sem uma solução adequada. Não tenho créditos suficientes para comentar, então aqui está minha pequena contribuição.
A primeira solução de Seth Robertson meio que funcionou para mim, mas só me deu branches locais, entre os quais havia muitos falsos positivos, provavelmente por causa de mesclagens do branch estável.
A segunda solução de Adam Dymitruk não funcionou para mim. Para começar, o que é --format =% 5? Não é reconhecido pelo git, não consegui encontrar nada sobre ele e não consegui fazê-lo funcionar com outras opções de formato.
Mas sua primeira solução combinada com a opção --source e com um grep simples provou ser útil:
git log --all --source -- <filename> | grep -o "refs/.*" | sort -u
Isso me dá uma série de tags e branches remotos e um branch local, onde fiz as alterações mais recentes no arquivo. Não tenho certeza de como isso é completo.
ATUALIZE conforme a solicitação de @nealmcb, classificando os ramos pela mudança mais recente:
Primeiro, você pode alterar o grep para "refs / heads /.*", que fornecerá apenas os branches locais. Se houver apenas alguns branches, você pode examinar o commit mais recente de cada um assim:
git log -1 <branch> -- <filename>
Se houver mais branches e você realmente quiser automatizar isso, você pode combinar os dois comandos usando xargs, git log formatting e outra classificação neste one-liner:
git log --all --source -- <filename> | grep -o "refs/heads/.*" | sort -u | xargs -I '{}' git log -1 --format=%aI%x20%S '{}' -- <filename> | sort -r
Isso resultará em uma saída como esta:
2020-05-07T15:10:59+02:00 refs/heads/branch1
2020-05-05T16:11:52+02:00 refs/heads/branch3
2020-03-27T11:45:48+00:00 refs/heads/branch2