Что означает двойная тире перед именем файла в этой команде git?
git checkout --ours -- path/to/file.txt
git checkout --theirs -- path/to/file.txt
Они обязательны? Это эквивалентно
git checkout --ours path/to/file.txt
git checkout --theirs path/to/file.txt
git
git-checkout
mottalrd
источник
источник
Ответы:
Предположим, у меня есть файл с именем
path/to/file.txt
в моем Git-репозитории, и я хочу отменить изменения в нем.Теперь предположим, что файл называется
master
...Упс! Это изменило ветви вместо этого. В
--
разъединяет дерево вы хотите проверить из файлов , которые вы хотите проверить.Это также помогает нам, если какой-то freako добавил файл с именем
-f
в наш репозиторий:Это задокументировано в git-checkout: Аргументация неоднозначности .
источник
--
можно использовать для отделения опций от других аргументов, так что вы увидите это в таких командах, какcp
иmv
(которые не являются частью Bash).checkout
документации команды?checkout
команды, но нигде документация не объясняет, что она делает и почему она используется ... именно это в конечном итоге и привело меня сюда.--
. Как кто-то, кто не пришел из Linux, не очевидно, что это делает. Для меня это был синтаксис, специфичный для git, без описания его функционального назначения. Я думаю, что было бы лучше иметь краткое описание, как и другие варианты, или хотя бы ссылку на справочную страницу Linux .Двойная черта "-" означает "флаги конца командной строки", то есть она говорит предыдущей команде не пытаться анализировать то, что следует за параметрами командной строки.
источник
git
это означает больше, чем это, поскольку это также означает, что аргумент после--
not не может быть именем ветви, и, как следствие, аргумент перед--
не может быть путем к файлу.Обратите внимание, что вам это не понадобится, так как Git 2.5 (2 квартал 2015 г.) стоит '
--
', если ваш аргумент включает подстановочный знак (*
)Эвристика, помогающая
git <cmd> <revs> <pathspec>
соглашению " " в командной строке отлавливать неправильно набранные пути, состоит в том, чтобы убедиться, что все не-rev параметры в более поздней части командной строки являются именами файлов в рабочем дереве, но это означает, что "git grep $str -- \*.c
" всегда должно быть с неоднозначностью "--
", потому что никто в здравом уме не создаст файл, имя которого буквально - звездочка-точка-см.Git 2.5 теряет эвристику, чтобы объявить, что с помощью подстановочной строки пользователь, вероятно, намеревался дать нам указание пути .
Смотрите коммит 28fcc0b (02 мая 2015 г.) от Duy Nguyen (
nguyenlocduy
) .(Слито Junio C Hamano -
gitster
- в фиксации 949d167 , 19 мая 2015 года)В Git 2.26 (Q1 2020) логика устранения неоднозначности для разделения ревизий и спецификаций пути была изменена таким образом, чтобы специальные символы глобуса с обратной косой чертой не учитывались в правиле «подстановочные знаки являются спецификацией пути».
См. Коммит 39e21c6 (25 января 2020 г.) Джеффа Кинга (
peff
) .(Слиты Junio C Hamano -
gitster
- в фиксации 341f8a6 , 12 Feb 2020)( DWIM: делай, что я имею в виду )
источник