Русский ▾ Topics ▾ Latest version ▾ git-replace last updated in 2.44.0

НАЗВАНИЕ

git-replace — Создание, вывод списка, удаление ссылок для замены объектов

ОБЗОР

git replace [-f] <объект> <замена>
git replace [-f] --edit <объект>
git replace [-f] --graft <коммит> [<родитель>…​]
git replace [-f] --convert-graft-file
git replace -d <объект>…​
git replace [--format=<формат>] [-l [<шаблон>]]

ОПИСАНИЕ

Добавляет ссылку «replace» (замены) в пространстве имён refs/replace/.

Именем ссылки «replace» является SHA-1 заменяемого объекта. Содержимым ссылки «replace» является SHA-1 объекта-замены.

Заменяемый объект и объект-замена должны быть одного типа. Это ограничение можно обойти, используя -f.

Если не указан -f, ссылка «replace» ещё не должна существовать.

Нет никаких других ограничений на заменяемый объект и объект-замену. Коммиты слияния могут быть заменены коммитами без слияния, и наоборот.

Ссылки замены будут использоваться по умолчанию всеми командами Git, за исключением тех, которые выполняют обход достижимости (prune, pack transfer и fsck).

Можно отключить использование ссылок замены для любой команды, используя опцию --no-replace-objects сразу после git.

Например, если коммит foo был заменён коммитом bar:

$ git --no-replace-objects cat-file commit foo

показывает информацию о коммите foo, в то время как:

$ git cat-file commit foo

показывает информацию о коммите bar.

Переменная среды GIT_NO_REPLACE_OBJECTS может быть установлена для достижения того же эффекта, что и опция --no-replace-objects.

ПАРАМЕТРЫ

-f
--force

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

-d
--delete

Удалить существующие ссылки замены для указанных объектов.

--edit <объект>

Редактировать содержимое объекта в интерактивном режиме. Существующее содержимое для <объекта> выводится в удобочитаемом виде во временный файл, запускается редактор для этого файла, и результат анализируется для создания нового объекта того же типа, что и <объект>. Затем создаётся ссылка замены, чтобы заменить <объект> на вновь созданный объект. Подробности о том, как будет выбран редактор, см. в git-var[1].

--raw

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

--graft <коммит> [<родитель>…​]

Создать сброшенный (graft) коммит. Создаётся новый коммит с тем же содержимым, что и <коммит>, за исключением того, что его родителями будут [<родитель>…​] вместо родителей <коммита>. Затем создаётся ссылка замены, чтобы заменить <коммит> на вновь созданный коммит. Используйте --convert-graft-file для преобразования файла $GIT_DIR/info/grafts и использования ссылок замены вместо него.

--convert-graft-file

Создаёт сброшенные (graft) коммиты для всех записей в $GIT_DIR/info/grafts и удаляет этот файл в случае успеха. Цель — помочь пользователям перейти от теперь устаревшего файла grafts.

-l <шаблон>
--list <шаблон>

Вывести список ссылок замены для объектов, соответствующих заданному шаблону (или все, если шаблон не задан). Ввод «git replace» без аргументов также выводит все ссылки замены.

--format=<формат>

При выводе списка используйте указанный <формат>, который может быть одним из short, medium и long. Если не указан, формат по умолчанию — short.

ФОРМАТЫ

Доступны следующие форматы:

  • short: <заменённый-sha1>

  • medium: <заменённый-sha1> → <замена-sha1>

  • long: <заменённый-sha1> (<заменённый-тип>) → <замена-sha1> (<тип-замены>)

СОЗДАНИЕ ОБЪЕКТОВ-ЗАМЕН

git-hash-object[1], git-rebase[1] и git-filter-repo, среди прочих команд git, могут использоваться для создания объектов-замен из существующих объектов. Опция --edit также может использоваться с git replace для создания объекта-замены путём редактирования существующего объекта.

Если вы хотите заменить много blob-объектов, деревьев или коммитов, которые являются частью цепочки коммитов, вы можете просто создать заменяющую цепочку коммитов, а затем заменить только коммит на верхушке (tip) целевой цепочки коммитов на коммит на верхушке заменяющей цепочки коммитов.

ОШИБКИ

Сравнение blob-объектов или деревьев, которые были заменены, с теми, которые их заменяют, не будет работать должным образом. И использование git reset --hard для возврата к заменённому коммиту переместит ветку на коммит-замену, а не на заменённый коммит.

Могут возникнуть и другие проблемы при использовании git rev-list, связанные с ожидающими объектами.

GIT

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