Home Explore Blog CI



git

3rd chunk of `Documentation/git-filter-branch.adoc`
db9addc379b3aaf7e804d38d6797eb2cb892410fdca201c40000000100000fa2
 normal commit and
	"-p parent1 -p parent2 -p parent3 ..." for a merge commit.

--msg-filter <command>::
	This is the filter for rewriting the commit messages.
	The argument is evaluated in the shell with the original
	commit message on standard input; its standard output is
	used as the new commit message.

--commit-filter <command>::
	This is the filter for performing the commit.
	If this filter is specified, it will be called instead of the
	'git commit-tree' command, with arguments of the form
	"<TREE_ID> [(-p <PARENT_COMMIT_ID>)...]" and the log message on
	stdin.  The commit id is expected on stdout.
+
As a special extension, the commit filter may emit multiple
commit ids; in that case, the rewritten children of the original commit will
have all of them as parents.
+
You can use the 'map' convenience function in this filter, and other
convenience functions, too.  For example, calling 'skip_commit "$@"'
will leave out the current commit (but not its changes! If you want
that, use 'git rebase' instead).
+
You can also use the `git_commit_non_empty_tree "$@"` instead of
`git commit-tree "$@"` if you don't wish to keep commits with a single parent
and that makes no change to the tree.

--tag-name-filter <command>::
	This is the filter for rewriting tag names. When passed,
	it will be called for every tag ref that points to a rewritten
	object (or to a tag object which points to a rewritten object).
	The original tag name is passed via standard input, and the new
	tag name is expected on standard output.
+
The original tags are not deleted, but can be overwritten;
use "--tag-name-filter cat" to simply update the tags.  In this
case, be very careful and make sure you have the old tags
backed up in case the conversion has run afoul.
+
Nearly proper rewriting of tag objects is supported. If the tag has
a message attached, a new tag object will be created with the same message,
author, and timestamp. If the tag has a signature attached, the
signature will be stripped. It is by definition impossible to preserve
signatures. The reason this is "nearly" proper, is because ideally if
the tag did not change (points to the same object, has the same name, etc.)
it should retain any signature. That is not the case, signatures will always
be removed, buyer beware. There is also no support for changing the
author or timestamp (or the tag message for that matter). Tags which point
to other tags will be rewritten to point to the underlying commit.

--prune-empty::
	Some filters will generate empty commits that leave the tree untouched.
	This option instructs git-filter-branch to remove such commits if they
	have exactly one or zero non-pruned parents; merge commits will
	therefore remain intact.  This option cannot be used together with
	`--commit-filter`, though the same effect can be achieved by using the
	provided `git_commit_non_empty_tree` function in a commit filter.

--original <namespace>::
	Use this option to set the namespace where the original commits
	will be stored. The default value is 'refs/original'.

-d <directory>::
	Use this option to set the path to the temporary directory used for
	rewriting.  When applying a tree filter, the command needs to
	temporarily check out the tree to some directory, which may consume
	considerable space in case of large projects.  By default it
	does this in the `.git-rewrite/` directory but you can override
	that choice by this parameter.

-f::
--force::
	'git filter-branch' refuses to start with an existing temporary
	directory or when there are already refs starting with
	'refs/original/', unless forced.

--state-branch <branch>::
	This option will cause the mapping from old to new objects to
	be loaded from named branch upon startup and saved as a new
	commit to that branch upon exit, enabling incremental of large
	trees. If '<branch>' does not exist it will be created.

<rev-list options>...::
	Arguments for 'git rev-list'.  All positive refs included by
	these options are rewritten.  You may

Title: Git Filter Branch Options and Filters
Summary
The git-filter-branch command provides various options and filters to rewrite Git revision history, including message filters, commit filters, tag name filters, and prune empty options, as well as options to set temporary directories, force execution, and load state from branches.