マージ済みのブランチを削除する
マージ済みのブランチを削除する
結論
ブランチ固定版
git show-branch origin/master > /dev/null 2>&1;
if [ $? -eq 0 ]; then
git branch --merged origin/master | grep -v -P "\*" | xargs -r git branch -d;
fi
関数化したもの
function rm-merge-base() {
branch_name=$1
git show-branch $branch_name > /dev/null 2>&1;
if [ $? -eq 0 ]; then
git branch --merged $branch_name | grep -v -P "\*|main|master|develop|release" | xargs -r git branch -d;
fi
}
function rm-merge() {
rm-merge-base origin/master
rm-merge-base origin/develop
rm-merge-base origin/main
}
解説
リモートブランチの存在確認を行う
以下のコマンドで origin/master
が存在する場合は終了コード($?
) は 0 になる。
存在しない場合は、場合は終了コード($?
) は 0 以外 (128) になる。
git show-branch origin/master
コマンドの出力で標準出力も標準エラー出力も捨てたいので、 > /dev/null
を行って出力をすててて、かつ、2>&1
をすることで標準出力と標準エラー出力をマージして /dev/null
に出力する。
git show-branch
の結果による条件分岐
git show-branch
コマンドが失敗した場合は次以降の処理を行わなくするために if [ $? -eq 0 ]
で条件分岐する。git show-branch
コマンドが成功した場合は終了コードが 0 になるのでそのときだけ以降の処理を実行する。
マージ済みのブランチの列挙
以下のコマンドで origin/master
にマージしたローカルブランチを列挙する。
git branch --merged origin/master
カレントブランチの除外
カレントブランチの先頭には *
がついているので
grep -v -P "\*"
で *
がついている行を除外することでカレントブランチを除外する。
この際 master や develop ブランチも除外したい場合は
grep -v -P "\*|main|master|develop|release"
のように |
で区切って条件を複数指定する。
列挙したブランチの削除
xargs
で列挙したブランチ名を git branch -d
に渡す。
この際 -r
オプションを指定することにより grep の結果が空の場合に git branch -d
の引数が空で呼ばれることがないようにする。
備考
git show-branch origin/master > /dev/null 2>&1;
および xargs -r git branch -d;
の最後のカンマは、これらのコマンドを一行で記述できるようにするためのもので複数行で指定するときには削除してもよい。
Discussion