--
отделяет пути от других параметров. Из документации :
git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...
Если бы это обозначение не существовало, следующие две команды были бы неоднозначными:
git checkout <tree-ish> <path1> <path2>
git checkout <path1> <path2> <path3>
С помощью обозначения --
ясно, что означает:
git checkout <tree-ish> -- <path1> <path2>
git checkout -- <path1> <path2> <path3>
Документация, на которую я ссылался выше, включает пример того, когда вам это может понадобиться:
$ git checkout hello.c
Если у вас есть неудачная ветка с именем hello.c, этот шаг будет путать с инструкцией по переключению на эту ветку. Вместо этого вы должны написать:
$ git checkout - hello.c