When commit-filter echoes just "skip", just skip that commit by mapping its object name to the same (possibly rewritten) object name(s) its parent(s) are mapped to. IOW, given A-B-C, if commit-filter says "skip" upon B, the rewritten branch will look like this: A'-C'. Signed-off-by: Johannes Schindelin <johannes.schindelin@xxxxxx> --- Of course, if you think of "patchsets", this behaviour might be unexpected, since the children will still contain everything which was changed in the skipped revisions, and not changed in _them_. git-filter-branch.sh | 15 ++++++++++++--- 1 files changed, 12 insertions(+), 3 deletions(-) diff --git a/git-filter-branch.sh b/git-filter-branch.sh index 9d61b7f..e6ed7b9 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -102,6 +102,9 @@ # multiple commit ids; in that case, all of them will be used # as parents instead of the original commit in further commits. # +# For the common case, that this commit should be skipped, just +# output a single "skip". +# # --tag-name-filter COMMAND:: The filter for rewriting tag names. # If this filter is passed, it will be called for every tag ref # that points to a rewritten object (or to a tag object which @@ -321,7 +324,7 @@ test $commits -eq 0 && die "Found nothing to rewrite" i=0 while read commit; do i=$(($i+1)) - printf "$commit ($i/$commits) " + printf "\rRewriting commits... ($i/$commits)" git-read-tree -i -m $commit @@ -358,8 +361,14 @@ while read commit; do sed -e '1,/^$/d' <../commit | \ eval "$filter_msg" | \ - sh -c "$filter_commit" git-commit-tree $(git-write-tree) $parentstr | \ - tee ../map/$commit + sh -c "$filter_commit" \ + git-commit-tree $(git-write-tree) $parentstr \ + > ../map/$commit + + test skip = "$(cat ../map/$commit)" && + for parent in $(get_parents $commit); do + map "$parent" + done > ../map/$commit done <../revs src_head=$(tail -n 1 ../revs) -- 1.5.2.1.2689.gaf768-dirty - 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