directory search
Guides gitattributes giteveryday gitglossary gitignore gitmodules gitrevisions gittutorial gitworkflows Administration git archive git bundle git clean git filter-branch git fsck git gc git instaweb git reflog Basic Snapshotting git add git commit git diff git mv git reset git rm git status Branching and Merging git branch git checkout git log git merge git mergetool git stash git tag Debugging git bisect git blame git grep Email git am git format-patch git request-pull git send-email External Systems git fast-import git svn Getting and Creating Projects git clone git init Git git annotate git archimport git bisect-lk2009 git check-attr git check-mailmap git check-ref-format git checkout-index git cherry git citool git column git credential git credential-cache git credential-store git cvsexportcommit git cvsimport git cvsserver git diff-files git diff-tree git difftool git fast-export git fetch-pack git fmt-merge-msg git get-tar-commit-id git gui git http-backend git http-fetch git http-push git imap-send git index-pack git interpret-trailers git ls-remote git ls-tree git mailinfo git mailsplit git merge-file git merge-index git merge-one-file git merge-tree git mktag git mktree git name-rev git notes git p4 git pack-objects git pack-redundant git pack-refs git parse-remote git patch-id git prune git prune-packed git quiltimport git receive-pack git remote-ext git remote-fd git remote-testgit git repack git replace git rerere git send-pack git sh-i18n git sh-setup git shell git show-branch git show-index git stripspace git unpack-file git unpack-objects git upload-archive git upload-pack git var git verify-commit git verify-tag git whatchanged git worktree Inspection and Comparison git describe git shortlog git show Miscellaneous api credentials api index gitcli gitcore tutorial gitcredentials gitcvs migration gitdiffcore githooks gitk gitnamespaces gitremote helpers gitrepository layout gitsubmodules gittutorial 2 gitweb gitweb.conf pack format User Manual Patching git apply git cherry-pick git rebase git revert Plumbing Commands git cat-file git check-ignore git commit-tree git count-objects git diff-index git for-each-ref git hash-object git ls-files git merge-base git read-tree git rev-list git rev-parse git show-ref git symbolic-ref git update-index git update-ref git verify-pack git write-tree Server Admin git daemon git update-server-info Setup and Config git git config git help Sharing and Updating Projects git fetch git pull git push git remote git submodule
characters

名称

git-replace  - 创建,列出,删除引用来替换对象

概要

git replace [-f] <object> <replacement>git replace [-f] --edit <object>git replace [-f] --graft <commit> [<parent>…]git replace -d <object>…
git replace [--format=<format>] [-l [<pattern>]]

描述

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

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

被替换的对象和替换对象必须是相同的类型。这个限制可以绕过使用-f

除非-f给出,否则replace参考不得存在。

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

所有 Git 命令默认使用替换引用,除了那些进行可访问性遍历(修剪,包传输和 fsck)的引用。

对于任何使用该--no-replace-objects选项的命令,可以禁用替换引用的使用git

例如,如果commit foo已经被commitbar代替:

$ 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>具有相同类型的新对象。然后创建一个替换ref,用新创建的对象替换<object>。有关如何选择编辑器的详细信息,请参阅git-var [1]。

--raw

编辑时,提供原始对象内容而不是漂亮的内容。目前这只影响树木,它们将以二进制形式显示。这很难处理,但可以帮助修复一个如此受损的树,无法打印。请注意,您可能需要将您的编辑器配置为干净地读取和写入二进制数据。

--graft <commit> <parent>…

创建一个嫁接提交。一个新的提交与<commit>具有相同的内容,除了它的父母将是<parent> ...而不是<commit>的父母。然后创建一个替换ref,用新创建的提交替换<commit>。有关基于此选项的示例脚本,请参阅 contrib / convert-grafts-to-replace-refs.sh,该选项可以将移植替换为替换。

-l <pattern>   --list <pattern>

列表替换与给定模式匹配的对象的引用(如果没有给出模式,则全部替换)。键入“git替换”不带参数,也列出所有替换参考。

--format=<format>

当列出,使用指定的<格式>,它可以是一个shortmediumlong。省略时,格式默认为short

格式

以下格式可用:

  • short: <replaced sha1>

  • medium: <replaced sha1> → <replacement sha1>

  • long: <replaced sha1> (<replaced type>) → <replacement sha1> (<replacement type>)

创建替换对象

git-filter-branch [1],git-hash-object [1]和 git-rebase [1]等 git 命令可用于从现有对象创建替换对象。--edit选项也可用于git replace通过编辑现有对象来创建替换对象。

如果你想要替换很多 blob,树或提交,它们是提交字符串的一部分,你可能只想创建一个替换的提交字符串,然后只在提交的目标提交字符串的顶端替换提交提交替换字符串的提示。

错误

比较已经替换它们的斑点或树木将无法正常工作。并且使用git reset --hard返回到替换的提交将分支移动到替换提交而不是替换的提交。

使用git rev-list与待处理对象相关时可能会有其他问题。

Previous article: Next article: