git branch を fzf で選択していい感じに一括削除

git branch を fzf で選択していい感じに一括削除

git の branch を fzf で選択して削除するというもの

git-remove-branch()
{
  local branchs q k results
  while out=$(
    git branch | sed -e 's/\*//g' -e 's/\ //g' \
               | sed -e 's/master//g' -e 's/develop//g' \
               | fzf --ansi --multi --no-sort --reverse --query="$q" \
                     --print-query --expect=ctrl-d); do
    q=$(head -1 <<< "$out")
    k=$(head -2 <<< "$out" | tail -1)
    branchs=$(sed '1,2d' <<< "$out" | awk '{print $1}')
    branchs=("${(@f)$(printf $branchs)}")
    [ -z "$branchs" ] && continue
    if [ "$k" = ctrl-d ]; then
      for branch in $branchs; do
        git branch -D $branch
        if [ $? -eq 0 ]; then
          results=($results $branch)
        fi
      done
      printf "\n\e[31m Deleted branchs:\e[0m\n"
      for result in $results; do
        printf "\t\e[32m $result\e[0m\n"
      done
      printf "\n"
      break
    fi
  done
}

Ctrl-i で 複数選択後,Ctrl-d で削除

f:id:maxmellon:20160925031448g:plain