Флаг -q
является необязательным и подразумевается непустой частью <paths>...
.Например:
git reset HEAD feature2file
имеет один аргумент <path>
, а именно feature2file
, поэтому подразумевается флаг -q
.
... в чем его отличие... git reset [<mode>] [<commit>]
Эта команда, в которой отсутствуют аргументы <path>
, вызывает другой режим работы git reset
.
Некоторые люди (включая меня)) которые думают, что это всегда должны были быть две разные входные команды Git, чтобы уменьшить вероятность путаницы.Но это не так, поэтому мы застряли в этой путанице.
Разве первая форма git reset [-q] [<tree-ish>] [--] <paths>…
не такая же, как git reset --mixed HEAD [--] <paths>…
?
(Iисправил не пунктирную mixed
, чтобы читать --mixed
).Было бы , если бы последние были разрешены.Это, по крайней мере официально, не разрешено, но:
$ git reset --mixed HEAD -- Makefile
warning: --mixed with paths is deprecated; use 'git reset -- <paths>' instead.
Обратите внимание, что --hard
и --soft
исключены:
$ git reset --soft HEAD -- Makefile
fatal: Cannot do soft reset with paths.
$ git reset --hard HEAD -- Makefile
fatal: Cannot do hard reset with paths.
Случай --mixed
,который является значением по умолчанию, если [<mode>]
опущен, а [<commit>]
является необязательным и по умолчанию HEAD
, означает, что:
git reset hello
является неоднозначным:
- Делает ли этосоответствовать шаблону
git reset [<mode>] [<commit>]
, где mode
опущен (по умолчанию --mixed
), а hello
переведен в коммит с помощью правил из шести шагов в документации gitrevisions?Да, он точно соответствует этому шаблону. - Соответствует ли он шаблону
git reset [-q] [<tree-ish>] [--] <files>...
, где <tree-ish>
опущен, а <files>
- имя файла hello
?Да, он явно соответствует этому шаблону.
Какой из них git reset
использует?Ответ таков: кодируется, чтобы опробовать оба, и если оба могут применить, выдают сообщение об ошибке:
fatal: ambiguous argument 'wt-status.c': both revision and filename
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
Эта проблема не возникла бы, если бы были разные команды для разныхрежимы работы.