"git checkout -". против Git Checkout
Я всегда использовал git checkout -- .
, чтобы очистить рабочий каталог. Мне показалось, что я где-то читал, что --
должен был избегать git, думая, что вы передаете параметры (или что-то еще)
Теперь коллега сказал мне, что я могу сбросить --
, и действительно, быстрый тест сделал точно то же самое.
Есть ли разница между этими двумя командами?
PS: Спросить здесь, потому что git checkout -- .
vs git checkout .
- это довольно сложно для Google...
Ответы
Ответ 1
Мне кажется, что --
- это способ сказать Git рассматривать то, что следует checkout
как файл, а не как ветвь. Предположим, что у вас были как файл, так и ветвь с именем stuff
. Тогда следующая команда выглядит неоднозначной:
git checkout stuff
потому что неясно, запрашиваете ли вы проверку файла или ветки. Используя --
, вы явно укажете Git, чтобы проверить файл по этому имени/пути. Поэтому в этом случае следующие команды позволяют проверять ветку и файл с именем stuff
:
git checkout stuff # checkout the branch stuff
git checkout -- stuff # checkout the file stuff
Обратите внимание, что git checkout <name>
действительно предназначен для ветвей, но синтаксис Git расслаблен, и если Git не может найти ветку, то он будет искать файл.
Близко связанный: Git изменить ветвь, когда присутствует файл с таким же именем
Ответ 2
--
как автономный аргумент (т.е. не часть другого аргумента) используется многими командами командной строки UNIX, чтобы указать, что все, что следует за ним, не является аргументом.
Почему? Ну, в этом случае он используется в случае, если у вас есть путь, имя которого начинается с --
, которое не должно интерпретироваться как его собственный аргумент.
то есть. git checkout -- --mydirectory
, который без --
выдаст ошибку.