gitでremoteで削除さらたブランチをローカルでも削除する方法

gitを使う場合、githubのプルリクを利用する人も多いかと思います。 プルリク&マージしたあと、リモートには存在しないブランチがローカルで残り続けることになります。

このままだと開発しにくいし、「どのブランチで作業してたっけ?」と混乱する原因にもなります。 そういう場合は、remoteに合わせてローカルのブランチも削除しましょう

結論から言うと、下記のコマンドを実行することで、一括削除することができます

$ git fetch --prune && git branch --merged | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %

%は誤記じゃありません。ちゃんと含めてね

remoteに合わせてブランチを消すには2つの手順が必要

  1. 削除されたリモートブランチであることをローカルに認識させる
  2. remoteで削除されたブランチを削除する

削除されたリモートブランチであることをローカルに認識させる

削除されたブランチは、通常のgit pullgit fetchでは 「remoteで削除された」という情報をローカルに持ってくることができません。1

なので、これらの情報持ってくるために、次のコマンドを実行します。

$ git fetch --prune

コレで、「remotes/origin/*」がローカルに反映されます。

remoteで削除されたブランチを削除する

「remotes/origin/*」でremoteが削除されたブランチであることがわかります。 それを実際に確認するには下記のコマンドを実行します。

git branch --merged

あとは、コレで表示されたブランチを削除しましょう。

まとめ

下記のコマンドを実行すれば、remoteのブランチに合わせることができます。

$ git fetch --prune && git branch --merged | grep -vE '^\*|master$|develop$' | xargs -I % git branch -d %

リモートで削除されたブランチをローカルで反映させるには、結構面倒です。


  1. 正確には、「remotes/origin/*」の情報がローカルに降りてきません