Commit 7ec344d8 authored by Csaba Henk's avatar Csaba Henk Committed by Junio C Hamano

filter-branch: retire --remap-to-ancestor

We can be clever and know by ourselves when we need the behavior
implied by "--remap-to-ancestor". No need to encumber users by having
them exposed to it as a tunable. (Option kept for backward compatibility,
but it's now a no-op.)
Signed-off-by: default avatarCsaba Henk <>
Signed-off-by: default avatarJunio C Hamano <>
parent 515cc010
......@@ -159,18 +159,7 @@ to other tags will be rewritten to point to the underlying commit.
--subdirectory-filter <directory>::
Only look at the history which touches the given subdirectory.
The result will contain that directory (and only that) as its
project root. Implies --remap-to-ancestor.
Rewrite refs to the nearest rewritten ancestor instead of
ignoring them.
Normally, positive refs on the command line are only changed if the
commit they point to was rewritten. However, you can limit the extent
of this rewriting by using linkgit:rev-list[1] arguments, e.g., path
limiters. Refs pointing to such excluded commits would then normally
be ignored. With this option, they are instead rewritten to point at
the nearest ancestor that was not excluded.
project root. Implies <<Remap_to_ancestor>>.
Some kind of filters will generate empty commits, that left the tree
......@@ -204,7 +193,18 @@ the nearest ancestor that was not excluded.
Arguments for 'git rev-list'. All positive refs included by
these options are rewritten. You may also specify options
such as '--all', but you must use '--' to separate them from
the 'git filter-branch' options.
the 'git filter-branch' options. Implies <<Remap_to_ancestor>>.
Remap to ancestor
By using linkgit:rev-list[1] arguments, e.g., path limiters, you can limit the
set of revisions which get rewritten. However, positive refs on the command
line are distinguished: we don't let them be excluded by such limiters. For
this purpose, they are instead rewritten to point at the nearest ancestor that
was not excluded.
......@@ -139,6 +139,7 @@ do
# deprecated ($remap_to_ancestor is set now automatically)
......@@ -265,7 +266,14 @@ mkdir ../map || die "Could not create map/ directory"
# we need "--" only if there are no path arguments in $@
nonrevs=$(git rev-parse --no-revs "$@") || exit
test -z "$nonrevs" && dashdash=-- || dashdash=
if test -z "$nonrevs"
rev_args=$(git rev-parse --revs-only "$@")
case "$filter_subdir" in
......@@ -307,6 +307,24 @@ test_expect_success '--remap-to-ancestor with filename filters' '
test $orig_invariant = $(git rev-parse invariant)
test_expect_success 'automatic remapping to ancestor with filename filters' '
git checkout master &&
git reset --hard A &&
test_commit add-foo2 foo 1 &&
git branch moved-foo2 &&
test_commit add-bar2 bar a &&
git branch invariant2 &&
orig_invariant=$(git rev-parse invariant2) &&
git branch moved-bar2 &&
test_commit change-foo2 foo 2 &&
git filter-branch -f \
moved-foo2 moved-bar2 A..master \
-- -- foo &&
test $(git rev-parse moved-foo2) = $(git rev-parse moved-bar2) &&
test $(git rev-parse moved-foo2) = $(git rev-parse master^) &&
test $orig_invariant = $(git rev-parse invariant2)
test_expect_success 'setup submodule' '
rm -fr ?* .git &&
git init &&
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment