Многие консольные команды разбирают переданные им параметры используя вызов
getopt
getopt отдельно выделяет аргумент "--" как маркер окончания списка параметров:
The special argument "--" forces an end of option-scanning regardless of the scanning mode.
То есть после найденного -- будет прекращена обработка строки вызова, все последующие параметры будут оставлены как есть, даже если там будет что-то похожее на другие поддерживаемые программой параметры.
В частности, git reset использует это поведение для однозначного отделения имён файлов: всё после -- будет восприниматься как имена файлов вместо чего-то вот такого:
$ git reset file
fatal: ambiguous argument 'file': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git [...] -- [...]'