【Git】masterにマージ済みの不要なリモートブランチを手軽に一括削除する

やりたいこと

masterブランチにマージ済みだが削除されていないリモートブランチが多数残っている。

これらの不要なリモートブランチを手軽に削除したい。

コマンド

リモートのmasterブランチにマージ済みのブランチから、masterとdevelopを除外した一覧を作り、ブランチ名を整形し、削除のプッシュをする。

$ git branch -r --merged master | grep -vE "master|develop" | cut -d "/" -f2- | xargs -t -I{} git push --delete origin {}

実行例

git push --delete origin story/bar
To https://github.com/hoge/fuga
 - [deleted]           story/bar
git push --delete origin hotfix/foo
To https://github.com/hoge/fuga
 - [deleted]           hotfix/foo

git branch -r

リモートブランチを表示する。

–merged master

masterブランチとマージ済みのブランチを表示の対象とする。

grep -vE “master|develop”

masterまたはdevelopの名前が付いたブランチを除外する。

-v

指定の文字列を含まない行を表示する。

-E

拡張正規表現を使えるようにするオプション。

今回はor検索を行うために使用している。

cut -d “/” -f2-

/区切りの2番目のフィールド以降を抽出するために使用。

ここまでのコマンドで生成されたブランチ一覧の各行には、頭にorigin/が付いている。

origin/story/bar

このままではブランチの削除コマンドに使えないので、 cutコマンドで加工する。

-d

区切り文字の変更を行うオプション。

-f

区切り文字で分けたフィールドのうち、どれを抽出するか決めるオプション。

フィールドは1番からカウントするので、 2- と書くことで、フィールドの2番目以降を抽出できる。

xargs -t -I{} git push –delete origin {}

ブランチを1つずつ削除していく。

xargs

パイプで渡した行単位で指定のコマンドを実行する。

-t

実行するコマンドを画面に出力する。

-l{}

パイプで渡されてきた引数の位置を指定する場合に使用する。

今回は後続のコマンドの {} 部分にブランチ名を置く。

git push –delete origin {}

リモートレポジトリに対して、対象ブランチを削除するプッシュを行う。

カテゴリーGit

コメントを残す

メールアドレスが公開されることはありません。