Русский ▾ Topics ▾ Latest version ▾ git-restore last updated in 2.54.0

НАЗВАНИЕ

git-restore — Восстановление файлов рабочего каталога

ОБЗОР

git restore [<параметры>] [--source=<дерево>] [--staged] [--worktree] [--] <спецификатор-пути>…​
git restore [<параметры>] [--source=<дерево>] [--staged] [--worktree] --pathspec-from-file=<файл> [--pathspec-file-nul]
git restore (-p|--patch) [<параметры>] [--source=<дерево>] [--staged] [--worktree] [--] [<спецификатор-пути>…​]

ОПИСАНИЕ

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

Команда также может использоваться для восстановления содержимого в индексе с помощью --staged или для восстановления как рабочего каталога, так и индекса с помощью --staged --worktree.

По умолчанию, если указан --staged, содержимое восстанавливается из HEAD, в противном случае — из индекса. Используйте --source, чтобы восстановить из другого коммита.

См. "Сброс, восстановление и отмена" в git[1] для получения информации о различиях между тремя командами.

ПАРАМЕТРЫ

-s <дерево>
--source=<дерево>

Восстанавливает файлы рабочего каталога с содержимым из заданного дерева. Обычно исходное дерево указывается именованием связанного с ним коммита, ветки или метки.

Если не указано, содержимое восстанавливается из HEAD, если указан --staged, в противном случае — из индекса.

В качестве особого случая вы можете использовать "<rev-A>...<rev-B>" как сокращение для базы слияния <rev-A> и <rev-B>, если существует ровно одна база слияния. Вы можете опустить не более одного из <rev-A> и <rev-B>, и в этом случае по умолчанию используется HEAD.

-p
--patch

Интерактивно выбирать фрагменты в разнице между источником восстановления и местом восстановления. См. раздел "Интерактивный режим" в git-add[1], чтобы узнать, как работать в режиме --patch.

-U<n>
--unified=<n>

Создавать сравнения с <число> строками контекста. Количество строк контекста по умолчанию равно diff.context или 3, если переменная конфигурации не установлена. (-U без <числа> молча принимается как синоним -p из-за исторической случайности).

--inter-hunk-context=<n>

Выводить в качестве контекста между блоками изменений до <n> строк, тем самым объединяя близкие блоки изменений. По умолчанию равно значению переменной конфигурации diff.interHunkContext или 0, если она не установлена.

-W
--worktree
-S
--staged

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

-q
--quiet

Тихий режим, подавлять информационные сообщения. Подразумевает --no-progress.

--progress
--no-progress

Ход выполнения по умолчанию выводится в стандартный поток ошибок, если он подключён к терминалу, если не указан --quiet. Этот флаг включает вывод хода выполнения, даже если он не подключён к терминалу, независимо от --quiet.

--ours
--theirs

При восстановлении файлов в рабочем каталоге из индекса использовать этап #2 (ours) или #3 (theirs) для неслитых (unmerged) путей. Этот параметр нельзя использовать при переключении путей из указателя-дерева (т.е. с параметром --source).

Обратите внимание, что во время git rebase и git pull --rebase значения ours и theirs могут поменяться местами. Подробности см. в объяснении тех же параметров в git-checkout[1].

-m
--merge

При восстановлении файлов в рабочем каталоге из индекса воссоздать конфликтное слияние в неслитых (unmerged) путях. Этот параметр нельзя использовать при переключении путей из указателя-дерева (т.е. с параметром --source).

--conflict=<стиль>

То же, что и параметр --merge выше, но изменяет способ представления конфликтующих блоков, переопределяя переменную конфигурации merge.conflictStyle. Возможные значения: merge (по умолчанию), diff3 и zdiff3.

--ignore-unmerged

При восстановлении файлов в рабочем каталоге из индекса не прерывать операцию, если есть неслитые (unmerged) записи и не указаны ни --ours, ни --theirs, ни --merge, ни --conflict. Неслитые пути в рабочем каталоге остаются нетронутыми.

--ignore-skip-worktree-bits

В режиме частичного переключения (sparse checkout) по умолчанию обновляются только записи, соответствующие <спецификатор-пути> и разрежённым шаблонам в $GIT_DIR/info/sparse-checkout. Этот параметр игнорирует разрежённые шаблоны и безусловно восстанавливает любые файлы в <спецификатор-пути>.

--recurse-submodules
--no-recurse-submodules

Если <спецификатор-пути> указывает на активный подмодуль и местоположение восстановления включает рабочий каталог, подмодуль будет обновлён только в том случае, если указан этот параметр, и в этом случае его рабочий каталог будет восстановлен до коммита, записанного в суперпроекте, а любые локальные изменения будут перезаписаны. Если ничего (или --no-recurse-submodules) не используется, рабочие каталоги подмодулей не будут обновляться. Как и в git-checkout[1], это отсоединит HEAD подмодуля.

--overlay
--no-overlay

В режиме наложения (overlay) никогда не удалять файлы при восстановлении. В режиме без наложения (no-overlay) удалять отслеживаемые файлы, которые не появляются в <дерево> из --source=<дерево>, чтобы они точно соответствовали <дерево>. По умолчанию используется режим без наложения.

--pathspec-from-file=<файл>

Спецификатор пути передаётся в <файле>, а не в аргументах командной строки. Если <файл> точно равен -, то используется стандартный ввод. Элементы спецификатора пути разделяются символами LF или CR/LF. Элементы спецификатора пути могут заключаться в кавычки, как объяснено для переменной конфигурации core.quotePath (см. git-config[1]). См. также --pathspec-file-nul и глобальный --literal-pathspecs.

--pathspec-file-nul

Имеет значение только при указании --pathspec-from-file. Элементы спецификатора пути отделяются друг от друга с помощью NUL-символа, а все остальные символы интерпретируются буквально (включая кавычки и переводы строк).

--

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

<спецификатор-пути>…

Ограничивает пути, на которые влияет операция.

Более подробно описание см. в параграфе спецификатор пути (pathspec) в gitglossary[7].

ПРИМЕРЫ

Следующая последовательность переключается на ветку master, возвращает Makefile на две редакции назад, случайно удаляет hello.c и возвращает его из индекса.

$ git switch master
$ git restore --source master~2 Makefile  (1)
$ rm -f hello.c
$ git restore hello.c                     (2)
  1. извлечь файл из другого коммита

  2. восстановление hello.c из индекса

Если вы хотите восстановить все C-файлы исходного кода, чтобы они соответствовали версии в индексе, вы можете выполнить

$ git restore '*.c'

Обратите внимание на кавычки вокруг *.c. Файл hello.c также будет восстановлен, даже если его больше нет в рабочем каталоге, потому что подстановка файлов используется для сопоставления записей в индексе (а не в рабочем каталоге оболочкой).

Чтобы восстановить все файлы в текущем каталоге

$ git restore .

или чтобы восстановить все файлы рабочего каталога с помощью волшебного спецификатора пути top (см. gitglossary[7])

$ git restore :/

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

$ git restore --staged hello.c

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

$ git restore --source=HEAD --staged --worktree hello.c

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

$ git restore -s@ -SW hello.c

СМ. ТАКЖЕ

GIT

Является частью пакета git[1]