5 ответов:
потому что нет смысла (другие команды уже предоставляют эту функциональность), и это уменьшает вероятность того, что вы случайно сделаете что-то не так.
"жесткий сброс" для пути просто делается с
git checkout HEAD -- <path>(проверка существующей версии файла).мягкий сброс для пути не имеет смысла.
смешанный сброс для пути-это то, что
git reset -- <path>делает.
вы можете выполнить то, что вы пытаетесь сделать с помощью
git checkout HEAD <path>.тем не менее, предоставленное сообщение об ошибке не имеет смысла для меня (как
git resetотлично работает на подкаталогах), и я не вижу причин, почемуgit reset --hardне надо делать именно то, что вы от него требуете.
вопрос как уже ответил, я объясню почему часть.
Итак, что же делает git reset делать? В зависимости от заданных параметров, он может делать разные вещи:
Если вы укажете путь, он заменит соответствующие файлы в индексе файлами из фиксации (HEAD по умолчанию). Это действие не влияет на рабочую дерева и обычно используется как противоположность git add.
Если вы не укажете путь, он переместит текущую головку ветви в указанную фиксацию и,вместе с дополнительно сбрасывает индекс и рабочее дерево в состоянии этого совершить. Это дополнительные поведение контролируется параметром mode:
--soft: не трогайте индекс и рабочее дерево.
-- mixed (по умолчанию): сброс индекса, но не рабочий дерево.
--hard: сброс индекса и рабочего дерева.
Есть также другие варианты, см. документацию для полного списка и некоторых вариантов использования.когда вы не указываете фиксацию, по умолчанию используется HEAD, поэтому
git reset --softничего не будет делать, так как это команда для перемещения голова к голове (в ее нынешнем состоянии).git reset --hard, С другой стороны, имеет смысл из-за его побочные эффекты, Он говорит двигать голову к голове и сброс индекса и рабочее дерево в голову.Я думаю, что теперь должно быть ясно, почему эта операция не предназначена для конкретных файлов по своей природе - она предназначена для перемещения головки ветви в первую очередь, сброса рабочего дерева и индекса вторичной функциональности.
объяснение
The
git resetруководство перечисляет 3 способа вызова:
2 являются файловыми:они не влияют на рабочее дерево, но работать только с файлами в индексе, указанном
<paths>:
git reset [-q] [<tree-ish>] [--] <paths>..git reset (--patch | -p) [<tree-ish>] [--] [<paths>...]1 является commit-wise: работает на все файлы в указанной
<commit>, и мая влияет на рабочее дерево:
git reset [<mode>] [<commit>]нет режима вызова, который работает только с указанными файлами и влияет на рабочее дерево.
решение
если вы хотите:
- сброс индекса / версии кэша файла(ов)
- Проверьте файл (ы) (т. е. сделайте рабочее дерево соответствующим индексу и зафиксируйте версия)
вы можете использовать этот псевдоним в вашем файле конфигурации git:
[alias] reco = !"cd \"${GIT_PREFIX:-.}\" && git reset \"$@\" && git checkout \"$@\" && git status --short #" # Avoid: "fatal: Cannot do hard reset with paths."вы можете сделать один из:
$ git reco <paths> $ git reco <branch/commit> <paths> $ git reco -- <paths>(Mnenonic для
reco:reset &&cчертout)
git reset --мягкая головка~1 filename отменить фиксацию, но изменения остаются локальными. filename может быть -- для всех введенных файлов
Comments