The man page for update-index says -q Quiet. If --refresh finds that the index needs an update, the default behavior is to error out. This option makes git update-index continue anyway. --ignore-submodules Do not try to update submodules. This option is only respected when passed before --refresh. However, it seems that the "This option is only respected when passed before --refresh." also applies to -q (and --unmerged); at least I get different results from git update-index -q --refresh git update-index --refresh -q >From the documentation, that doesn't seem to be intentional, but the code in update-index.c seems to handle -q, --ignore-submodules, --ignore-missing and --unmerged the same way. Rasmus