Spec-Zone.ru › Git

git-replace

Имя

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

Краткое описание

git replace [-f] <object> <replacement>
git replace [-f] --edit <object>
git replace [-f] --graft <commit> [<parent>…​]
git replace [-f] --convert-graft-file
git replace -d <object>…​
git replace [--format=<format>] [-l [<pattern>]]

Описание

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

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

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

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

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

По умолчанию ссылки замены используются всеми командами Git, кроме команд, выполняющих обход достижимости (prune, передачу пакетов и 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 <object>

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

--raw

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

--graft <commit> [<parent>…​]

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

--convert-graft-file

Создать коммиты-прививки для всех записей в $GIT_DIR/info/grafts и удалить этот файл после успешного выполнения. Этот параметр предназначен для помощи пользователям при переходе с ныне устаревшего файла graft.

-l <pattern>
--list <pattern>

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

--format=<format>

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

Форматы

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

  • short: <replaced-sha1>

  • medium: <replaced-sha1> → <replacement-sha1>

  • long: <replaced-sha1> (<replaced-type>) → <replacement-sha1> (<replacement-type>)

Создание объектов-замен

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

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

Ошибки

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

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

Предостережения

Наличие объектов-замен или прививок коммитов отключает чтение и запись графа коммитов, что может привести к снижению производительности. См. git-commit-graph[1].

См. также

git-hash-object[1] git-rebase[1] git-tag[1] git-branch[1] git-commit[1] git-var[1] git[1] git-filter-repo

replace

© 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2.
https://git-scm.com/docs/git-replace

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API