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