Johannes Schindelin wrote: > +# These refs should be updated if their heads were rewritten > + > +git rev-parse --revs-only --symbolic "$@" | > +while read ref > +do > + # normalize ref > + case "$ref" in > + HEAD) > + ref="$(git symbolic-ref "$ref")" > + ;; > + refs/*) > + ;; > + *) > + ref="$(git for-each-ref --format='%(refname)' | > + grep /"$ref")" > + esac > + > + git check-ref-format "$ref" && echo "$ref" > +done > "$tempdir"/heads This does not work as I'd expected it: I can't successfully say: git-filter-branch master It tells me: Which ref do you want to rewrite? > +# NEEDSWORK: we should sort the unmapped refs topologically first > +while read ref > +do > + sha1=$(git rev-parse "$ref"^0) > + test -f "$workdir"/../map/$sha1 && continue > + # Assign the boundarie(s) in the set of rewritten commits > + # as the replacement commit(s). > + # (This would look a bit nicer if --not --stdin worked.) > + for p in $((cd "$workdir"/../map; ls | sed "s/^/^/") | > + git rev-list $ref --boundary --stdin | > + sed -n "s/^-//p") > + do > + map $p >> "$workdir"/../map/$sha1 > + done > +done < "$tempdir"/heads This logic seems to be borked, and I don't grok it. I was trying this: git-filter-branch -- --since=2007.01.10 \ refs/heads/topic refs/heads/master where topic's last change is from before 2007.01.10, i.e. it is not among the rewritten commits. And I get this: WARNING: Ref 'refs/heads/master' is unchanged WARNING: 'refs/heads/topic' was rewritten into multiple commits: 329325526647503382ae7dee41c12fe6b81bbe43 2bdf3349b76f72ceb71755c75a555d60bc7c73aa ce6c9dfeac5ddbd64da2d9360d6552717df81d1f The first 2 of these 3 sha1s happen to be merge bases of topic and master, but none of them appear anywhere in git rev-list --parents --boundary --since=2007.07.10 \ refs/heads/topic refs/heads/master What's up? -- Hannes - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html