git でマージ済みのリモートブランチを確認したりまとめて削除したいことがしばしばあるので、git のサブコマンド風に作ってみた。
以下の内容を /usr/local/bin/git-merged-remote-branch として保存して実行権限を与えておく。
/usr/local/bin/git-merged-remote-branch
#!/bin/bash
usage() {
echo "usage: git merged-remote-branch <remote>"
echo " Show and remove merged remote branched."
echo
echo "options"
echo " -h, --help show help"
echo " -D, --delete remove remote branch"
echo
exit 1
}
REMOTE=origin
for OPT in $*
do
case $OPT in
'-h'|'--help' )
usage
exit 1
;;
'-D'|'--delete' )
FLAG_DELETE=1
;;
*)
if [[ ! -z "$1" ]] && [[ ! "$1" =~ ^-+ ]]; then
REMOTE=$1
else
usage
exit 1
fi
esac
shift
done
if [ "$FLAG_DELETE" ]; then
echo delete merged branches on [$REMOTE]
git branch -a --merged | grep -v master | grep remotes/$REMOTE/| sed -e "s% *remotes/$REMOTE/%%"| xargs -I% git push $REMOTE :%
else
echo merged branches on [$REMOTE]
git branch -a --merged | grep -v master | grep remotes/$REMOTE/| sed -e "s% *remotes/$REMOTE/% %"
fi
使うときは
$ git merged-remote-branch
でマージ済みのリモートブランチを表示。
デフォルトでは origin をチェックするが、任意のリモートリポジトリを指定したい場合はリモート名を引数で指定する。
$ git merged-remote-branch myorigin
オプションに -D
を指定すると、マージ済みのリモートブランチをまとめて消す。(オプションは前でも後ろでもOK)
$ git merged-remote-branch myorigin -D
(参考にさせていただいた情報)