Когда я хочу деактивировать поэтапный файл, все мои руководства по Git показывают что-то вроде:
$ git add * $ git statusOn ветке master Изменения, которые необходимо зафиксировать: (используйте "git reset HEAD ..." для отмены постановки) переименовано: README.md -> README изменено: CONTRIBUTING.md
Этот совет говорит нам использовать git reset для отключения поэтапного файла.
Но вместо этого в моем терминале я вижу:
git statusOn ветка master Изменения, которые необходимо зафиксировать: (используйте "git restore --staged ..." для отмены постановки) переименовано: cat.js -> catcat.js переименовано: толеранто.gogo -> толендо.txt Файлы без отслеживания: (используйте "git добавить ... "для включения в то, что будет зафиксировано) readme (копировать) .md толендо (копировать) .txt zing (копировать) .html
Мой терминал сообщает мне нужно использовать git restore --staged , но в руководствах, а также на веб-сайте Git, мне предлагается использовать git reset HEAD .
Я понятия не имею о новой команде restore . Я попытался найти в Google разницу между git reset и git restore , но ничего не подходило к моему вопросу.
Можете вы помогите мне?
Большое спасибо!
Я представил git restore (который все еще помечен как «экспериментальный») в статье «Как сбросить все файлы из рабочего каталога, но не из промежуточной области?» с недавним Git 2.23 (август 2019 г.).
Это помогает отделить git checkout на две команды:
- для файлов (
git restore), которая может охватыватьgit resetслучаях. - один для ветвей (
git switch, как показано в разделе «Смущает git checkout»), который имеет дело только с ветками, а не с файлами. .
Как указано в документации для сброса, восстановления и возврата:
Есть три команды с похожими именами:
git reset,git restoreиgit revert.
git-revertо макине g новый коммит, который отменяет изменения, сделанные другими коммитами.git-restoreкасается восстановления файлов в рабочем дереве либо из индекса, либо из другого коммита.
Эта команда не обновляет вашу ветку.
Эту команду также можно использовать для восстановления файлов в индексе из другого коммита.git-resetкасается обновления вашей ветки, перемещения подсказки для добавления или удаления коммитов из ветки. Эта операция изменяет историю коммитов.git resetтакже можно использовать для восстановления индекса, перекрываяgit restore.
Итак:
Чтобы восстановить файл в индексе, чтобы он соответствовал версии в HEAD (это то же самое, что использовать
git-reset)git restore --staged hello. cили вы можете восстановить и индекс, и рабочее дерево (это то же самое, что и при использовании
git-checkout)git restore --source = HEAD --staged --worktree hello.cили краткая форма, которая более практична, но менее читаема:
git restore -s @ -SW hello.c
С Git 2.25.1 (Февраль 2020 г.) « git restore --staged » некорректно обновлял структуру дерева кэша, в результате чего впоследствии записывались фиктивные деревья, что было исправлено.
См. обсуждение.
См. фиксацию e701bab (8 января 2020 г.) Джеффа Кинга ( peff ).
(Объединено Junio C Hamano — gitster — в фиксации 09e393d, 22 января 2020 г.)





