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-filter-branch[1], linkgit:git-hash-object[1] and
linkgit:git-rebase[1], 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-filter-branch[1]
linkgit:git-rebase[1]
linkgit:git-tag[1]
linkgit:git-branch[1]
linkgit:git-commit[1]
linkgit:git-var[1]
linkgit:git[1]

GIT
---
Part of the linkgit:git[1] suite
