Tecnicamente, todos os argumentos para shell scripts são opcionais. Cabe ao script determinar se há argumentos ausentes e o que fazer sobre isso. Isso pode ser feito de várias maneiras, dependendo das suas necessidades. Para um script que tem apenas um argumento opcional, algo assim funcionaria:
#!/usr/bin/env sh
if [ ${#1} -eq 0 ]
then
git commit -m "default message"
else
git commit -m "$1"
fi
Isso verifica se o comprimento do primeiro argumento é zero e age de acordo. Se o primeiro argumento estiver faltando, ele contará como tendo comprimento zero. Você também pode verificar o número de argumentos comparando com $#
.
Uma variação menor do script acima, que aproveita a substituição do argumento vazio, é:
#!/usr/bin/env sh
git commit -m "${1:-default message}"
Esse tipo de coisa é descrito aqui em "2.6.2 Expansão de Parâmetros".