find . -name '.git' -prune
é o mesmo que
find . -name '.git' -prune -print
para remover e depois imprimir
find . -name '.git' -prune -o -name '*.md' -print
é o mesmo que
find . \( -name '.git' -prune -true \) -o \( -name '*.md' -print \)
então ele faz a primeira cláusula, se ele remover, então ele faz true (o prefixo retorna true), e não faz o lado direito de -o
Estes sempre serão impressos
find . \( -name '.git' -prune -o -name '*.md' \) -print
find . -name '.git' -prune -print -o -name '*.md' -print