From 9b5a66a33b183b19e01537208fd054d237feab45 Mon Sep 17 00:00:00 2001 From: Damian Krzeminski Date: Wed, 31 Oct 2012 23:54:59 -0600 Subject: [PATCH] Make delete-merge-branches more user-friendly It won't delete master. If you have a ligitimate reasn to delete master, you probably should use delete-branch directly. It works for multiple branches and it asks for confirmation each time. -f|--force supresses confirmation You can answer 'a' (all) when prompted, which means you won't be asked again. --- bin/git-delete-merged-branches | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/bin/git-delete-merged-branches b/bin/git-delete-merged-branches index a650469..44c8674 100755 --- a/bin/git-delete-merged-branches +++ b/bin/git-delete-merged-branches @@ -1,2 +1,20 @@ #!/bin/sh -git branch --merged | grep -v "*" | xargs git delete-branch + +delete_all="no" +current_branch=`git rev-parse --symbolic-full-name --abbrev-ref HEAD` + +test "$1" = "-f" -o "$1" = "--force" && delete_all="yes" + +git for-each-ref --shell --format="branch=%(refname:short)" refs/heads | \ +while read entry +do + eval "$entry" + merged=`git rev-list -n 1 $branch --not HEAD | wc -l` + if [ "$merged" = "0" -a "$branch" != "master" -a "$branch" != "$current_branch" ]; then + if [ "$delete_all" = "no" ]; then + read -p "Delete merged branch $branch? [y/n/a] " yna < /dev/tty + test "$yna" = "a" && delete_all="yes" + fi + test "$yna" = "y" -o "$delete_all" = "yes" && git delete-branch $branch + fi +done