リモートリポジトリのブランチを削除したい
- もう使わないので整理。
- マージ済みのやつは問答無用で削除。
- マージ済みでないやつは、開発中のブランチは削除しない。
リモートの削除なので、削除されるブランチを一旦確認してから実行してください。
作業の前後でfetchして最新にしつつ $ git br -a | grep origin/ | wc -l
とかすれば削除されているのが確認できる。
以下のマージ済/未マージの分け方は、わかりやすいから分けているだけ。最初の一覧はgit br -aとかで一気に指定してもOK
環境
Mac
手順
追跡ブランチを最新にする
$ git fetch --prune [リポジトリ名]
リモートリポジトリ(ex. originリポジトリ)のマージ済みブランチを削除
-
- マージ済みの追跡ブランチ一覧
-
- originリポジトリの追跡ブランチ一覧
-
- master、HEAD(よくわからん)を除く
-
- origin/XXXXXXを、XXXXXXに置換
-
- リモートリポジトリにあるブランチを削除(このコマンドだけ消して、削除対象のブランチを確認したほうがいい)
$ git br -a --merged | grep remotes/origin/ | grep -v -e remotes/origin/master -e remotes/origin/HEAD | sed -e 's%remotes/origin/\(.\)%\1%g' | xargs git push --delete origin
リモートリポジトリ(ex. originリポジトリ)の未マージブランチを削除
-
- 未マージの追跡ブランチ一覧
-
- originリポジトリの追跡ブランチ一覧
-
- 削除したくないブランチ(以下の例だとrelease、developing_branch)を除く
-
- origin/XXXXXXを、XXXXXXに置換
-
- リモートリポジトリにあるブランチを削除
$ git br -a --no-merged | grep remotes/origin/ | grep -v -e remotes/origin/release -e remotes/origin/developing_branch | sed -e 's%remotes/origin/\(.\)%\1%g' | xargs git push --delete origin
リモートリポジトリ(ex. upstreamリポジトリ)のブランチを削除
マージ済みとか関係なくこっちは一気に削除。
-
- 追跡ブランチ一覧
-
- upstreamリポジトリの追跡ブランチ一覧
-
- master, releaseブランチは除く
-
- remotes/upstream/XXXXXXを、XXXXXXに置換
-
- リモートリポジトリにあるブランチを削除
$ git br -a | grep remotes/upstream/ | grep -v -e upstream/release -e upstream/master | sed -e 's%remotes/upstream/\(.\)%\1%g' | xargs git push --delete upstream