Специальный «параметр» --
означает «обрабатывать каждый аргумент после этой точки как имя файла, независимо от того, как он выглядит».Это не специфично для Git, это общее соглашение командной строки Unix.Обычно вы используете его, чтобы уточнить, что аргумент является именем файла, а не параметром , например,
rm -f # does nothing
rm -- -f # deletes a file named "-f"
git checkout
1 также принимает --
дляозначает, что последующие аргументы не являются его необязательным «древовидным» параметром, определяющим, какой коммит вы хотите.
Так что в этом контексте безопасно использовать --
всегда, но вам нужно это когда файл, который вы хотите вернуть, имеет имя, которое начинается с -
, или совпадает с именем ветви.Некоторые примеры устранения неоднозначности ветки / файла:
git checkout README # would normally discard uncommitted changes
# to the _file_ "README"
git checkout master # would normally switch the working copy to
# the _branch_ "master"
git checkout -- master # discard uncommitted changes to the _file_ "master"
и устранение неоднозначности параметра / файла:
git checkout -p -- README # interactively discard uncommitted changes
# to the file "README"
git checkout -- -p README # unconditionally discard all uncommitted
# changes to the files "-p" and "README"
Я не уверен, что вы делаете, если у вас есть ветка чье имя начинается с -
.Возможно, не делайте этого в первую очередь.
1 в этом режиме;«Оформить заказ» может сделать несколько других вещей.Я никогда не понимал, почему git решил реализовать «отбрасывать незафиксированные изменения» как режим подкоманды «checkout», а не «возвращать», как большинство других VCS, или «reset», который, я думаю, может иметь больше смысла в собственных терминах git.