Подтвердить что ты не робот

"git checkout -". против Git Checkout

Я всегда использовал git checkout -- ., чтобы очистить рабочий каталог. Мне показалось, что я где-то читал, что -- должен был избегать git, думая, что вы передаете параметры (или что-то еще)

Теперь коллега сказал мне, что я могу сбросить --, и действительно, быстрый тест сделал точно то же самое.

Есть ли разница между этими двумя командами?

PS: Спросить здесь, потому что git checkout -- . vs git checkout . - это довольно сложно для Google...

4b9b3361

Ответ 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, который без -- выдаст ошибку.