You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.1 KiB
161 lines
5.1 KiB
git-replace(1) |
|
============== |
|
|
|
NAME |
|
---- |
|
git-replace - Create, list, delete refs to replace objects |
|
|
|
SYNOPSIS |
|
-------- |
|
[verse] |
|
'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>]] |
|
|
|
DESCRIPTION |
|
----------- |
|
Adds a 'replace' reference in `refs/replace/` namespace. |
|
|
|
The name of the 'replace' reference is the SHA-1 of the object that is |
|
replaced. The content of the 'replace' reference is the SHA-1 of the |
|
replacement object. |
|
|
|
The replaced object and the replacement object must be of the same type. |
|
This restriction can be bypassed using `-f`. |
|
|
|
Unless `-f` is given, the 'replace' reference must not yet exist. |
|
|
|
There is no other restriction on the replaced and replacement objects. |
|
Merge commits can be replaced by non-merge commits and vice versa. |
|
|
|
Replacement references will be used by default by all Git commands |
|
except those doing reachability traversal (prune, pack transfer and |
|
fsck). |
|
|
|
It is possible to disable use of replacement references for any |
|
command using the `--no-replace-objects` option just after 'git'. |
|
|
|
For example if commit 'foo' has been replaced by commit 'bar': |
|
|
|
------------------------------------------------ |
|
$ git --no-replace-objects cat-file commit foo |
|
------------------------------------------------ |
|
|
|
shows information about commit 'foo', while: |
|
|
|
------------------------------------------------ |
|
$ git cat-file commit foo |
|
------------------------------------------------ |
|
|
|
shows information about commit 'bar'. |
|
|
|
The `GIT_NO_REPLACE_OBJECTS` environment variable can be set to |
|
achieve the same effect as the `--no-replace-objects` option. |
|
|
|
OPTIONS |
|
------- |
|
-f:: |
|
--force:: |
|
If an existing replace ref for the same object exists, it will |
|
be overwritten (instead of failing). |
|
|
|
-d:: |
|
--delete:: |
|
Delete existing replace refs for the given objects. |
|
|
|
--edit <object>:: |
|
Edit an object's content interactively. The existing content |
|
for <object> is pretty-printed into a temporary file, an |
|
editor is launched on the file, and the result is parsed to |
|
create a new object of the same type as <object>. A |
|
replacement ref is then created to replace <object> with the |
|
newly created object. See linkgit:git-var[1] for details about |
|
how the editor will be chosen. |
|
|
|
--raw:: |
|
When editing, provide the raw object contents rather than |
|
pretty-printed ones. Currently this only affects trees, which |
|
will be shown in their binary form. This is harder to work with, |
|
but can help when repairing a tree that is so corrupted it |
|
cannot be pretty-printed. Note that you may need to configure |
|
your editor to cleanly read and write binary data. |
|
|
|
--graft <commit> [<parent>...]:: |
|
Create a graft commit. A new commit is created with the same |
|
content as <commit> except that its parents will be |
|
[<parent>...] instead of <commit>'s parents. A replacement ref |
|
is then created to replace <commit> with the newly created |
|
commit. Use `--convert-graft-file` to convert a |
|
`$GIT_DIR/info/grafts` file and use replace refs instead. |
|
|
|
--convert-graft-file:: |
|
Creates graft commits for all entries in `$GIT_DIR/info/grafts` |
|
and deletes that file upon success. The purpose is to help users |
|
with transitioning off of the now-deprecated graft file. |
|
|
|
-l <pattern>:: |
|
--list <pattern>:: |
|
List replace refs for objects that match the given pattern (or |
|
all if no pattern is given). |
|
Typing "git replace" without arguments, also lists all replace |
|
refs. |
|
|
|
--format=<format>:: |
|
When listing, use the specified <format>, which can be one of |
|
'short', 'medium' and 'long'. When omitted, the format |
|
defaults to 'short'. |
|
|
|
FORMATS |
|
------- |
|
|
|
The following format are available: |
|
|
|
* 'short': |
|
<replaced sha1> |
|
* 'medium': |
|
<replaced sha1> -> <replacement sha1> |
|
* 'long': |
|
<replaced sha1> (<replaced type>) -> <replacement sha1> (<replacement type>) |
|
|
|
CREATING REPLACEMENT OBJECTS |
|
---------------------------- |
|
|
|
linkgit:git-hash-object[1], linkgit:git-rebase[1], and |
|
https://github.com/newren/git-filter-repo[git-filter-repo], among other git commands, can be used to |
|
create replacement objects from existing objects. The `--edit` option |
|
can also be used with 'git replace' to create a replacement object by |
|
editing an existing object. |
|
|
|
If you want to replace many blobs, trees or commits that are part of a |
|
string of commits, you may just want to create a replacement string of |
|
commits and then only replace the commit at the tip of the target |
|
string of commits with the commit at the tip of the replacement string |
|
of commits. |
|
|
|
BUGS |
|
---- |
|
Comparing blobs or trees that have been replaced with those that |
|
replace them will not work properly. And using `git reset --hard` to |
|
go back to a replaced commit will move the branch to the replacement |
|
commit instead of the replaced commit. |
|
|
|
There may be other problems when using 'git rev-list' related to |
|
pending objects. |
|
|
|
SEE ALSO |
|
-------- |
|
linkgit:git-hash-object[1] |
|
linkgit:git-rebase[1] |
|
linkgit:git-tag[1] |
|
linkgit:git-branch[1] |
|
linkgit:git-commit[1] |
|
linkgit:git-var[1] |
|
linkgit:git[1] |
|
https://github.com/newren/git-filter-repo[git-filter-repo] |
|
|
|
GIT |
|
--- |
|
Part of the linkgit:git[1] suite
|
|
|