Você está combinando com a string inteira, não com cada linha da string, portanto você está realmente testando com ##
nessa regex.
grep
é a melhor opção para isso:
if ! git status -s | grep -q '^??'; then
echo "no match"
fi
Conforme solicitado, você pode fazer o mesmo para adicionar / modificar / excluir:
git status -s | grep '^ *[AMD]'
Você também pode querer olhar para git status --porcelain
(uma opção que apareceu pela primeira vez em 1.7.0), que é mais orientada para a análise.