summaryrefslogtreecommitdiff
path: root/git-filter-branch.sh
diff options
context:
space:
mode:
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>2007-08-31 19:06:27 (GMT)
committerJunio C Hamano <gitster@pobox.com>2007-09-01 06:22:51 (GMT)
commitf95eef15f2f8a336b9a42749f5458c841a5a5d63 (patch)
tree623a5f9e4d1f99d4056b51e4b68e77e4641bcdef /git-filter-branch.sh
parent7e0f1704b837355d833d84d18a3811d145867b97 (diff)
downloadgit-f95eef15f2f8a336b9a42749f5458c841a5a5d63.zip
git-f95eef15f2f8a336b9a42749f5458c841a5a5d63.tar.gz
git-f95eef15f2f8a336b9a42749f5458c841a5a5d63.tar.bz2
filter-branch: introduce convenience function "skip_commit"
With this function, a commit filter can leave out unwanted commits (such as temporary commits). It does _not_ undo the changeset corresponding to that commit, but it _skips_ the revision. IOW no tree object is changed by this. If you like to commit early and often, but want to filter out all intermediate commits, marked by "@@@" in the commit message, you can now do this with git filter-branch --commit-filter ' if git cat-file commit $GIT_COMMIT | grep '@@@' > /dev/null; then skip_commit "$@"; else git commit-tree "$@"; fi' newbranch Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-filter-branch.sh')
-rwxr-xr-xgit-filter-branch.sh14
1 files changed, 14 insertions, 0 deletions
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 3b041d8..a4b6577 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -23,6 +23,20 @@ map()
fi
}
+# if you run 'skip_commit "$@"' in a commit filter, it will print
+# the (mapped) parents, effectively skipping the commit.
+
+skip_commit()
+{
+ shift;
+ while [ -n "$1" ];
+ do
+ shift;
+ map "$1";
+ shift;
+ done;
+}
+
# override die(): this version puts in an extra line break, so that
# the progress is still visible