]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/git-replace.txt
builtin/replace: unset read_replace_refs
[thirdparty/git.git] / Documentation / git-replace.txt
CommitLineData
0f3a5bfd
CC
1git-replace(1)
2==============
3
4NAME
5----
6git-replace - Create, list, delete refs to replace objects
7
8SYNOPSIS
9--------
10[verse]
11'git replace' [-f] <object> <replacement>
12'git replace' -d <object>...
13'git replace' -l [<pattern>]
14
15DESCRIPTION
16-----------
831e61f8 17Adds a 'replace' reference in `refs/replace/` namespace.
0f3a5bfd 18
d5fa1f1a
TA
19The name of the 'replace' reference is the SHA-1 of the object that is
20replaced. The content of the 'replace' reference is the SHA-1 of the
0f3a5bfd
CC
21replacement object.
22
160df71e
CC
23The replaced object and the replacement object must be of the same type.
24This restriction can be bypassed using `-f`.
25
831e61f8 26Unless `-f` is given, the 'replace' reference must not yet exist.
0f3a5bfd 27
160df71e 28There is no other restriction on the replaced and replacement objects.
90749253 29Merge commits can be replaced by non-merge commits and vice versa.
160df71e 30
2de9b711 31Replacement references will be used by default by all Git commands
ddae8ae8
CC
32except those doing reachability traversal (prune, pack transfer and
33fsck).
b0fa7ab5 34
ddae8ae8
CC
35It is possible to disable use of replacement references for any
36command using the `--no-replace-objects` option just after 'git'.
b0fa7ab5 37
ddae8ae8 38For example if commit 'foo' has been replaced by commit 'bar':
b0fa7ab5
CC
39
40------------------------------------------------
ddae8ae8 41$ git --no-replace-objects cat-file commit foo
b0fa7ab5
CC
42------------------------------------------------
43
ddae8ae8 44shows information about commit 'foo', while:
b0fa7ab5
CC
45
46------------------------------------------------
47$ git cat-file commit foo
48------------------------------------------------
49
ddae8ae8 50shows information about commit 'bar'.
b0fa7ab5 51
0de8b947
CC
52The 'GIT_NO_REPLACE_OBJECTS' environment variable can be set to
53achieve the same effect as the `--no-replace-objects` option.
54
0f3a5bfd
CC
55OPTIONS
56-------
57-f::
ed0ff809 58--force::
0f3a5bfd
CC
59 If an existing replace ref for the same object exists, it will
60 be overwritten (instead of failing).
61
62-d::
ed0ff809 63--delete::
0f3a5bfd
CC
64 Delete existing replace refs for the given objects.
65
66-l <pattern>::
ed0ff809 67--list <pattern>::
0f3a5bfd
CC
68 List replace refs for objects that match the given pattern (or
69 all if no pattern is given).
70 Typing "git replace" without arguments, also lists all replace
71 refs.
72
b8fcce1e
CC
73CREATING REPLACEMENT OBJECTS
74----------------------------
75
76linkgit:git-filter-branch[1], linkgit:git-hash-object[1] and
77linkgit:git-rebase[1], among other git commands, can be used to create
78replacement objects from existing objects.
79
80If you want to replace many blobs, trees or commits that are part of a
81string of commits, you may just want to create a replacement string of
82commits and then only replace the commit at the tip of the target
83string of commits with the commit at the tip of the replacement string
84of commits.
85
0f3a5bfd
CC
86BUGS
87----
88Comparing blobs or trees that have been replaced with those that
ca768288 89replace them will not work properly. And using `git reset --hard` to
0f3a5bfd
CC
90go back to a replaced commit will move the branch to the replacement
91commit instead of the replaced commit.
92
93There may be other problems when using 'git rev-list' related to
160df71e 94pending objects.
0f3a5bfd
CC
95
96SEE ALSO
97--------
b8fcce1e
CC
98linkgit:git-hash-object[1]
99linkgit:git-filter-branch[1]
100linkgit:git-rebase[1]
0f3a5bfd
CC
101linkgit:git-tag[1]
102linkgit:git-branch[1]
b0fa7ab5 103linkgit:git[1]
0f3a5bfd 104
0f3a5bfd
CC
105GIT
106---
107Part of the linkgit:git[1] suite