Когда я хочу деактивировать поэтапный файл, все мои руководства по 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 г.)