设置和配置
获取和创建项目
基本快照
分支与合并
- branch (分支)
- checkout (检出)
- switch (切换)
- merge (合并)
- mergetool (合并工具)
- log (日志)
- stash (暂存)
- tag (标签)
- worktree (工作树)
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
- gitattributes (git属性)
- 命令行接口约定
- 日常Git
- 常见问题 (FAQ)
- 术语表
- 钩子
- gitignore (git忽略)
- gitmodules (git模块)
- 修订
- 子模块
- 教程
- 工作流程
- 所有指南...
管理
- clean (清理)
- gc (垃圾回收)
- fsck (文件系统检查)
- reflog (引用日志)
- filter-branch (过滤分支)
- instaweb (快速web)
- archive (归档)
- bundle (捆绑)
底层命令
- cat-file (查看文件内容)
- check-ignore (检查忽略)
- checkout-index (检出索引)
- commit-tree (提交树)
- count-objects (统计对象)
- diff-index (差异索引)
- for-each-ref (遍历引用)
- hash-object (计算对象哈希)
- ls-files (列出文件)
- ls-tree (列出树)
- merge-base (合并基础)
- read-tree (读取树)
- rev-list (反向列表)
- rev-parse (反向解析)
- show-ref (显示引用)
- symbolic-ref (符号引用)
- update-index (更新索引)
- update-ref (更新引用)
- verify-pack (验证打包)
- write-tree (写入树)
- 2.44.1 → 2.50.1 无更改
-
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
,否则 替换 引用必须尚未存在。
对被替换对象和替换对象没有其他限制。合并提交可以被非合并提交替换,反之亦然。
替换引用将默认被所有 Git 命令使用,除了那些执行可达性遍历的命令(prune、pack transfer 和 fsck)。
可以通过在 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>
-
以交互方式编辑对象的原始内容。
- --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、树或提交,您可能只想创建一系列替换提交,然后只用替换系列提交的尖端提交来替换目标系列提交的尖端提交。
BUG
比较已被替换的 blob 或树与替换它们的 blob 或树将无法正常工作。并且使用 git
reset
--hard
返回到已替换的提交会将分支移动到替换提交而不是被替换提交。
使用 git rev-list 时,可能还会出现与待定对象相关的其他问题。