安装和配置
获取和创建项目
基本快照
分支和合并
共享和更新项目
检查和比较
补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
管道命令
- 2.44.1 → 2.47.0 无更改
- 2.44.0 02/23/24
- 2.43.1 → 2.43.5 无更改
- 2.43.0 11/20/23
- 2.24.1 → 2.42.3 无更改
- 2.24.0 11/04/19
- 2.18.1 → 2.23.4 无更改
- 2.18.0 06/21/18
- 2.10.5 → 2.17.6 无更改
- 2.9.5 07/30/17
- 2.2.3 → 2.8.6 无更改
- 2.1.4 12/17/14
- 2.0.5 12/17/14
概要
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 引用必须不存在。
对被替换对象和替换对象没有其他限制。合并提交可以被非合并提交替换,反之亦然。
除进行可达性遍历(修剪、包传输和 fsck)的命令外,所有 Git 命令默认将使用替换引用。
可以使用 --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
中的所有条目创建嫁接提交,并在成功后删除该文件。目的是帮助用户从现在已弃用的嫁接文件过渡。 - -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 一起使用,通过编辑现有对象来创建替换对象。
如果你想替换许多属于一串提交的 Blob、树或提交,你可能只需要创建一串替换提交,然后用替换串中的顶端提交替换目标串中的顶端提交即可。
错误
比较被替换的 Blob 或树与替换它们的 Blob 或树将无法正常工作。使用 git reset --hard
回到一个被替换的提交将把分支移动到替换提交,而不是被替换的提交。
在使用 git rev-list 时,可能会出现与挂起对象相关的其他问题。
GIT
是 git[1] 套件的一部分