リモートに存在しないローカル追跡ブランチを削除するにはどうすればいいですか? 質問する

リモートに存在しないローカル追跡ブランチを削除するにはどうすればいいですか? 質問する

を使用するとgit remote prune origin、リモート上に存在しないローカル ブランチを削除できます。

しかし、それらのリモート ブランチから作成されたローカル ブランチも削除したいです (マージされていないかどうかを確認できれば便利です)。

これどうやってするの?

ベストアンサー1

プルーニング後、 でリモート ブランチのリストを取得できますgit branch -r。 リモート追跡ブランチを含むブランチのリストは で取得できますgit branch -vv。 したがって、これら 2 つのリストを使用すると、リモートのリストにないリモート追跡ブランチを見つけることができます。

この行で問題は解決するはずです (bashまたは が必要でzsh、標準の Bourne シェルでは機能しません)。

git fetch -p ; git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d

この文字列はリモート ブランチのリストを取得し、egrep標準入力を介して に渡します。そして、リモート追跡ブランチを持つブランチをフィルタリングし ( と を使用しgit branch -vvて を持つブランチをフィルタリングしますorigin)、その出力の最初の列を取得します。これがブランチ名になります。最後に、すべてのブランチ名を delete branch コマンドに渡します。

オプションを使用しているため-d、このコマンドを実行したときに、現在のブランチにマージされていないブランチは削除されません。

おすすめ記事