1. ホーム
  2. git

[解決済み] リモート上に存在しないローカル追跡ブランチをプルーニングする方法

2022-03-21 06:49:26

質問

git remote prune origin もうリモートにはないローカルブランチを削除することができます。

しかし、私はそれらのリモートブランチから作成されたローカルブランチも削除したいのです(それらがアンマージされているかどうかのチェックがあるとよいでしょう)。

どうすればいいのでしょうか?

どのように解決するのですか?

枝刈りした後、リモートブランチの一覧は 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 オプションを使用すると、このコマンドを実行したときに現在いるブランチにマージされていないブランチを削除することはありません。