0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

リモートブランチとローカルブランチから特定のキーワードを持つブランチだけを一括で削除する方法

Posted at

背景

開発を進めていると、マージ済みかどうかにかかわらず役目を終えて必要なくなったブランチが大量にのこってしまうことがあると思います。
そのような場合で、特に削除対象のブランチ名に全てfeatureなど一定のキーワードを含む場合、一括でリモート・ローカル共に消すことが出来ます。
今回はそのような方法についてわかりやすく解説します。

結論

以下のコマンドを1つづつ順に実行していきましょう。
${keyword} :お好きなキーワード(e.g. feature)に置き換えてください。

git fetch --prune
git branch --remote | grep ${keyword} #対象のブランチを本当に全て消しても大丈夫かこのコマンドで確認
git branch --remote | grep ${keyword} | sed -e "s/origin\///" | xargs git push --delete origin
git fetch --prune

解説

前提

今回は以下のようなローカル・リモートブランチがあるとします。

local remote
master origin/master
dev origin/dev
feature/test1 origin/feature/test1
feature/test2 origin/feature/test2
feature/test3 (no branch, deleted)

これらのブランチを、最終的に以下のように整理するのが目的です。

local remote
master origin/master
dev origin/dev
  1. ローカルのブランチを最新のものにアップデート
    この作業をしないと、あとでリモートですでに削除されているがローカルでは残っているブランチがあった場合にリモートブランチの一括削除が失敗します。

    git fetch --prune
    

    現在の状態

    local remote
    master origin/master
    dev origin/dev
    feature/test1 origin/feature/test1
    feature/test2 origin/feature/test2
  2. 特定のキーワードを持つリモートブランチを一括で取得
    ここではこれから一括で消すブランチを表示し、本当に全て消して良いかを確認します。
    大丈夫であれば先にすすんでください。
    grep: 特定の文字列を含む行を抽出するコマンド。今回はfeatureブランチを抽出。

    git branch --remote | grep feature
    
    output
    origin/feature/test1
    origin/feature/test2
    
  3. リモートブランチを一括で除去
    sed: 特定の文字列を置換するコマンド。今回は文字列"origin/"を各行から取り除いている。
    xargs: 入力を引数として別のコマンドを実行する。今回は抽出した各featureブランチに対してそれぞれgit push --delete origin {branch name} を実行している。
    git push --delete origin {branch name}: リモートブランチを削除するコマンド

    git branch --remote | grep feature | sed -e "s/origin\///" | xargs git push --delete origin
    

    現在の状態

    local remote
    master origin/master
    dev origin/dev
    feature/test1 (no branch, deleted)
    feature/test2 (no branch, deleted)
  4. リモートで除去されたブランチをローカルで一括除去
    手順1と全く同じです。

    git fetch --prune
    

    現在の状態

    local remote
    master origin/master
    dev origin/dev

まとめ

以上の方法で、ローカル・リモートブランチをきれいに整理することができました。
みなさんもブランチ削除を慎重に、そして大胆に行っていきましょう!

 参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?