Что такое команда `git restore` и в чем разница между` git restore` и `git reset`?

Что такое команда `git restore` и в чем разница между` git restore` и `git reset`?
На чтение
7 мин.
Просмотров
14
Дата обновления
11.11.2024

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

0 Комментариев
Комментариев на модерации: 0
Оставьте комментарий