设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.44.1 → 2.52.0 无更改
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.7 无更改
-
2.43.0
2023-11-20
- 2.24.1 → 2.42.4 无更改
-
2.24.0
2019-11-04
- 2.18.1 → 2.23.4 无更改
-
2.18.0
2018-06-21
- 2.10.5 → 2.17.6 无变更
-
2.9.5
2017-07-30
- 2.2.3 → 2.8.6 无变更
-
2.1.4
2014-12-17
-
2.0.5
2014-12-17
概要
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/ 命名空间下添加一个替换引用。
替换引用的名称是被替换对象的 SHA-1 值。替换引用的内容是替换对象的 SHA-1 值。
被替换对象和替换对象必须是相同的类型。可以使用 -f 选项绕过此限制。
除非指定了 -f 选项,否则替换引用必须不存在。
被替换对象和替换对象之间没有其他限制。合并提交可以被非合并提交替换,反之亦然。
默认情况下,除执行可达性遍历(prune、pack transfer 和 fsck)的 Git 命令外,所有 Git 命令都会使用替换引用。
可以通过在git 之后紧跟 --no-replace-objects 选项来禁用任何命令对替换引用的使用。
例如,如果提交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中的所有条目创建暂存提交,并在成功时删除该文件。目的是帮助用户从已弃用的暂存文件过渡。 - -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 命令可用于从现有对象创建替换对象。git replace 也可以使用 --edit 选项,通过编辑现有对象来创建替换对象。
如果您想替换许多作为一系列提交一部分的 blob、tree 或 commit,您可能只想创建一个替换的提交系列,然后只用替换系列顶部的提交替换目标系列顶部的提交。
BUG
比较已被替换的 blob 或 tree 与替换它们的 blob 或 tree 将无法正常工作。使用 git reset --hard 回到已被替换的提交将把分支移动到替换提交而不是被替换提交。
在使用与待处理对象相关的git rev-list时可能存在其他问题。