git restore staged что делает

Git restore staged что делает

Restore specified paths in the working tree with some contents from a restore source. If a path is tracked but does not exist in the restore source, it will be removed to match the source.

See «Reset, restore and revert» in git[1] for the differences between the three commands.

THIS COMMAND IS EXPERIMENTAL. THE BEHAVIOR MAY CHANGE.

OPTIONS

Restore the working tree files with the content from the given tree. It is common to specify the source tree by naming a commit, branch or tag associated with it.

When restoring files in the working tree from the index, use stage #2 (ours) or #3 (theirs) for unmerged paths.

When restoring files on the working tree from the index, recreate the conflicted merge in the unmerged paths.

In sparse checkout mode, by default is to only update entries matched by

Do not interpret any more arguments as options.

Limits the paths affected by the operation.

For more details, see the pathspec entry in gitglossary[7].

EXAMPLES

The following sequence switches to the master branch, reverts the Makefile to two revisions back, deletes hello.c by mistake, and gets it back from the index.

take a file out of another commit

restore hello.c from the index

If you want to restore all C source files to match the version in the index, you can say

To restore all files in the current directory

or to restore all working tree files with top pathspec magic (see gitglossary[7])

To restore a file in the index to match the version in HEAD (this is the same as using git-reset[1])

or you can restore both the index and the working tree (this the same as using git-checkout[1])

or the short form which is more practical but less readable:

Источник

Что такое команда Git Restore? В чем разница между Git Restore и Git Reset?

Когда я хочу Unstaging Staged File, все мои учебники по Git всегда показывают что-то вроде этого:

Удивительный намек показывает, что мы используем команду Git Reset для Unstaging Staged File.

Но вместо этого в моем терминале:

Я понятия не имею о новой команде восстановления и пытался гуглить разницу между сбросом и восстановлением, но, похоже, мне ничего не подходит.

Вы можете помочь мне?

2 ответа

Я представил git restore (который все еще помечен как «экспериментальный») в «Как сбросить все файлы из рабочего каталога, но не из области подготовки? «, с недавним Git 2.23 (август 2019).

Это помогает разделить git checkout на две команды:

Чтобы восстановить файл в индексе, чтобы он соответствовал версии в HEAD (это аналогично использованию git-reset )

или вы можете восстановить и индекс, и рабочее дерево (это то же самое, что и при использовании git-checkout )

или краткая форма, более практичная, но менее читаемая:

Автор сообщения: Торстен Крах
Подписано: Джефф Кинг

Мы можем решить это, вызвав remove_marked_cache_entries() сами, прежде чем писать индекс. Обратите внимание, что мы не можем просто вытащить его из checkout_worktree() ; эта функция должна перебирать записи CE_REMOVE (чтобы удалить их соответствующие файлы рабочего дерева) перед их удалением.

Читайте также:  с какими банками работает контур эльба

Одно любопытство по поводу теста: без этого патча он фактически вызывает BUG () при запуске git-restore:

Но в исходном отчете о проблеме, в котором использовался аналогичный рецепт, git restore фактически создает фиктивный индекс (а фиксация создается с неверным деревом). Я не уверен, почему тест здесь ведет себя иначе, чем мое воспроизведение из набора, но то, что здесь, должно поймать любой симптом (и исправление исправляет оба случая).

Подписано: Эрик Саншайн
Отзыв: Тейлор Блау

Итак, теперь это работает:

На первый вопрос «Что такое git-restore?»:

Эта команда была введена в git 2.23 (вместе с git-switch) для разделения нескольких задач, ранее объединенных в git-checkout.

Git-restore можно использовать в трех разных режимах, в зависимости от того, хотите ли вы вернуть работу в рабочей копии, в индекс или в оба.

На ваш второй вопрос «В чем разница между git-restore и git-reset?»

Существуют совпадения между этими двумя командами и различия.

Оба могут быть использованы для изменения вашей рабочей копии и / или области подготовки. Однако только git-reset может изменить ваш репозиторий. В этом смысле git-restore кажется более безопасным вариантом, если вы хотите вернуть только локальную работу.

Есть больше различий, которые я не могу перечислить здесь.

(*) Файл, не add добавленный в индекс, по-прежнему считается находящимся в индексе, однако в текущем «чистом» состоянии из текущей версии HEAD.

Источник

Отмена изменений в рабочей директории — Введение в Git

Одна из ключевых возможностей git — «откат» любых сделанных изменений буквально одной командой. Такое практически невозможно сделать без использования системы контроля версий. Только если помнить все изменения наизусть. В этом уроке мы поговорим про откат изменений, которые сделаны в рабочей директории, но ещё не попали в коммит.

Важно! Откат незакоммиченных изменений безвозвратен. Не существует никакой физической возможности получить эти изменения обратно, поэтому будьте крайне осторожны.

Неотслеживаемые файлы

Самая простая ситуация. Вы добавили новые файлы в репозиторий (или сгенерировали их как-то) и поняли, что они вам не нужны. В этом случае можно выполнить очистку:

Забавный факт: про эту команду знает не так много программистов. Вы можете удивить даже опытных ребят.

Изменённые файлы в рабочей директории

Файлы, добавленные для фиксации

С файлами, подготовленными к коммиту, можно поступить по-разному. Первый вариант — отменить изменения совсем, второй — переместить изменения из индекса в рабочую директорию. Второе полезно в том случае, если изменения нам нужны, но мы не хотим их коммитить сейчас.

И здесь снова помогает git. При выводе статуса он показывает нужную нам команду для перевода изменений в рабочую директорию:

Теперь, если нужно, можно выполнить git restore и окончательно отменить изменения в выбранных файлах.

Самостоятельная работа

Выполните все шаги из урока

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

Читайте также:  Что значит собака доминант

Наши выпускники работают в компаниях:

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Источник

Операции отмены

В любой момент вам может потребоваться что-либо отменить. Здесь мы рассмотрим несколько основных способов отмены сделанных изменений. Будьте осторожны, не все операции отмены в свою очередь можно отменить! Это одна из редких областей Git, где неверными действиями можно необратимо удалить результаты своей работы.

Эта команда использует область подготовки (индекс) для внесения правок в коммит. Если вы ничего не меняли с момента последнего коммита (например, команда запущена сразу после предыдущего коммита), то снимок состояния останется в точности таким же, а всё что вы сможете изменить — это ваше сообщение к коммиту.

Запустится тот же редактор, только он уже будет содержать сообщение предыдущего коммита. Вы можете редактировать сообщение как обычно, однако, оно заменит сообщение предыдущего коммита.

Например, если вы сделали коммит и поняли, что забыли проиндексировать изменения в файле, который хотели добавить в коммит, то можно сделать следующее:

В итоге получится единый коммит — второй коммит заменит результаты первого.

Очень важно понимать, что когда вы вносите правки в последний коммит, вы не столько исправляете его, сколько заменяете новым, который полностью его перезаписывает. В результате всё выглядит так, будто первоначальный коммит никогда не существовал, а так же он больше не появится в истории вашего репозитория.

Очевидно, смысл изменения коммитов в добавлении незначительных правок в последние коммиты и, при этом, в избежании засорения истории сообщениями вида «Ой, забыл добавить файл» или «Исправление грамматической ошибки».

Отмена индексации файла

Следующие два раздела демонстрируют как работать с индексом и изменениями в рабочем каталоге. Радует, что команда, которой вы определяете состояние этих областей, также подсказывает вам как отменять изменения в них. Например, вы изменили два файла и хотите добавить их в разные коммиты, но случайно выполнили команду git add * и добавили в индекс оба. Как исключить из индекса один из них? Команда git status напомнит вам:

Прямо под текстом «Changes to be committed» говорится: используйте git reset HEAD …​ для исключения из индекса. Давайте последуем этому совету и отменим индексирование файла CONTRIBUTING.md :

Команда выглядит несколько странно, но — работает! Файл CONTRIBUTING.md изменен, но больше не добавлен в индекс.

Отмена изменений в файле

В выводе команды из последнего примера список изменений выглядит примерно так:

Здесь явно сказано как отменить существующие изменения. Давайте так и сделаем:

Как видите, откат изменений выполнен.

Если вы хотите сохранить изменения в файле, но прямо сейчас их нужно отменить, то есть способы получше, такие как ветвление и припрятывание — мы рассмотрим их в главе Ветвление в Git.

Отмена действий с помощью git restore

Отмена индексации файла с помощью git restore

Файл CONTRIBUTING.md изменен, но снова не индексирован.

Откат измененного файла с помощью git restore

Он довольно недвусмысленно говорит, как отменить сделанные вами изменения. Давайте сделаем то, что написано:

Важно понимать, что git restore — опасная команда. Любые локальные изменения, внесенные в этот файл, исчезнут — Git просто заменит файл последней зафиксированной версией. Никогда не используйте эту команду, если точно не знаете, нужны ли вам эти несохраненные локальные изменения.

Читайте также:  ргэу какие документы нужны для поступления

Источник

2.4 Основы Git – Операции отмены

В любой момент вам может потребоваться что-либо отменить. Здесь мы рассмотрим несколько основных способов отмены сделанных изменений. Будьте осторожны, не все операции отмены можно отменить! Это одна из редких областей Git, где неверными действиями можно необратимо удалить результаты своей работы.

Эта команда использует область подготовки (индекс) для внесения правок в коммит. Если вы ничего не меняли с момента последнего коммита (например, команда запущена сразу после предыдущего коммита), то снимок состояния останется в точности таким же, а всё что вы сможете изменить – это ваше сообщение к коммиту.

Запустится редактор, только он уже будет содержать сообщение предыдущего коммита. Вы можете редактировать сообщение как обычно, однако, оно заменит сообщение предыдущего коммита.

Например, если вы сделали коммит и поняли, что забыли проиндексировать изменения в файле, который хотели добавить в коммит, то можно сделать следующее:

В итоге получится единый коммит – второй коммит заменит результаты первого.

Примечание

Очень важно понимать, что когда вы вносите правки в последний коммит, вы не столько исправляете его, сколько заменяете новым, который полностью его перезаписывает. В результате всё выглядит так, будто первоначальный коммит никогда не существовал, а также он больше не появится в истории вашего репозитория.

Очевидно, смысл изменения коммитов – добавление незначительных правок в последние коммиты и, при этом, в избежании засорения истории сообщениями вида «Ой, забыл добавить файл» или «Исправление грамматической ошибки».

Отмена индексации файла

Следующие два раздела демонстрируют как работать с индексом и изменениями в рабочем каталоге. Радует, что команда, которой вы определяете состояние этих областей, также подсказывает вам, как отменять изменения в них. Например, вы изменили два файла и хотите добавить их в разные коммиты, но случайно выполнили команду git add * и добавили в индекс оба. Как исключить из индекса один из них? Команда git status напомнит вам:

Прямо под текстом « Changes to be committed » говорится: используйте git reset HEAD … для исключения из индекса. Давайте последуем этому совету и отменим индексирование файла CONTRIBUTING.md :

Команда выглядит несколько странно, но – работает! Файл CONTRIBUTING.md изменен, но больше не добавлен в индекс.

Примечание

Отмена изменений в файле

В выводе команды из последнего примера список изменений выглядит примерно так:

Здесь явно сказано, как отменить существующие изменения. Давайте так и сделаем:

Как видите, откат изменений выполнен.

Важно

Если вы хотите сохранить изменения в файле, но прямо сейчас их нужно отменить, то есть способы получше, такие как ветвление и припрятывание – мы рассмотрим их в главе «Ветвление в Git».

Отмена действий с помощью git restore

Отмена индексации файла с помощью git restore

Файл CONTRIBUTING.md изменен, но снова не индексирован.

Откат измененного файла с помощью git restore

Это довольно недвусмысленно говорит, как отменить сделанные вами изменения. Давайте сделаем то, что написано:

Важно

Важно понимать, что git restore – опасная команда. Любые локальные изменения, внесенные в этот файл, исчезнут – Git просто заменит файл последней зафиксированной версией. Никогда не используйте эту команду, если точно не знаете, нужны ли вам эти несохраненные локальные изменения.

Источник

Сказочный портал