English ▾ 主题 ▾ 最新版本 ▾ git-replace 上次更新于 2.44.0

名称

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>]]

描述

refs/replace/ 命名空间中添加一个 *replace* 引用。

*replace* 引用的名称是被替换对象的 SHA-1。*replace* 引用的内容是替换对象的 SHA-1。

被替换对象和替换对象必须是同一类型。可以使用 -f 绕过此限制。

除非给出 -f,否则 *replace* 引用必须尚不存在。

对被替换对象和替换对象没有其他限制。合并提交可以被非合并提交替换,反之亦然。

默认情况下,所有 Git 命令(除了那些进行可达性遍历的命令(prune、pack transfer 和 fsck))都将使用替换引用。

可以使用 *git* 之后的 --no-replace-objects 选项禁用任何命令使用替换引用。

例如,如果 commit *foo* 已被 commit *bar* 替换

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

显示关于 commit *foo* 的信息,而

$ git cat-file commit foo

显示关于 commit *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 中的所有条目创建嫁接提交,并在成功后删除该文件。目的是帮助用户从现已弃用的嫁接文件过渡。

-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-hash-object[1]git-rebase[1]git-filter-repo 以及其他 git 命令可用于从现有对象创建替换对象。--edit 选项也可以与 *git replace* 一起使用,通过编辑现有对象来创建替换对象。

如果要替换作为一系列提交的一部分的许多 blobs、trees 或 commits,您可能只想创建一系列替换提交,然后仅将目标提交系列的顶端的提交替换为替换提交系列的顶端的提交。

错误

比较已被替换的对象与其替换对象将无法正常工作。使用 git reset --hard 返回到已替换的提交会将分支移动到替换提交,而不是已替换的提交。

在使用与待处理对象相关的 *git rev-list* 时可能存在其他问题。

GIT

属于 git[1] 套件的一部分

scroll-to-top