"git replace" learned a "--graft" option to rewrite parents of a commit. * cc/replace-graft: replace: add test for --graft with a mergetag replace: check mergetags when using --graft replace: add test for --graft with signed commit replace: remove signature when using --graft contrib: add convert-grafts-to-replace-refs.sh Documentation: replace: add --graft option replace: add test for --graft replace: add --graft option replace: cleanup redirection style in tests
		
			
				
	
	
		
			157 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			157 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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' -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. See contrib/convert-grafts-to-replace-refs.sh for an
 | 
						|
	example script based on this option that can convert grafts to
 | 
						|
	replace refs.
 | 
						|
 | 
						|
-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
 |