GithubでSquash Mergeされたブランチがローカルでbranch --mergedしても出てこない問題について

More than 3 years have passed since last update.

※ 2016/07/09追記

以下の方法だと複数人で開発しているときに、diffが0にならないケースがあって当然といえば当然なのですが、それだと動かない。

※ 追記終わり

Pull Requestでsquash mergeすると、手元でfetch --pruneしてpullしてbranch --mergedしても、mergeされたブランチとしてローカルのブランチが出てこない。

$ git checkout -b feature/hoge

...add...commit...

$ git push origin feature/hoge

...github上でdevelopブランチにsquash mergeされ削除される...

$ git checkout develop
$ git fetch --prune
$ git pull origin develop
$ git branch --merged

_人人人人人人人人人人人人人人_
> feature/hogeが出てこない <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄

これが出てこないとどうなるかというと、remote上でmergeされて削除されたブランチをローカルで一括削除することができなくなる。

今まで以下のようなコマンドでしのでいたのだけど、これでは一々ローカルのブランチを指定して削除しないといけない。


.gitconfig

  rmm = !git branch --merged | grep -v master | grep -v develop | grep -v \\* | xargs -I % git branch -d %


面倒くさいので、一旦自分なら問題ないという前提で以下のコマンドに変更した。


.gitconfig

  rmm = !git branch | grep -vE '(master|develop)' | cut -c3- | xargs -L1 sh -c '[ `git diff $1 | wc -l` -eq 0 ] && git branch -D $1' sh



  • ブランチごとのdiffの行数を見て0なら削除する

  • developとmasterブランチは絶対消さない

  • 自分が上記コマンドを叩くのはdevelopかmasterブランチでのみ

  • コミットしてないブランチを作成した直後はこのコマンドを叩かない(まあ消えても問題ない)

一旦これでOK!