Git 内のすべてのローカルブランチを削除する
-
masterを除く Git のすべてのローカルブランチを削除するための詳細なスクリプト -
Git の
-dオプションを使用して、マージされたブランチのみを削除するようにスクリプトを変更する - より簡単なスクリプトを使用して、Git 内のすべてのローカルブランチを削除する
-
スクリプトを変更して、Git の
master-prodのようなmasterに似た名前のローカルブランチを削除する - Git 内のすべてのローカルブランチを削除するための短いスクリプト
- Git 内のすべてのローカルブランチを削除するための 1 行のハード削除コマンド
古いローカルブランチはローカルリポジトリを乱雑にしますが、それ以上の価値はありません。このチュートリアルを使用すると、すべてのローカルブランチを一度に削除できます。
このタスクのスクリプトを作成するには、grep、xargs、for-each-ref などのコマンドを使用します。さまざまなユースケースのさまざまなオプションを示します。
また、チュートリアルの最後に、すべてのローカルブランチを削除するための 1 行のクイックハックを提供します。
master を除く Git のすべてのローカルブランチを削除するための詳細なスクリプト
次のスクリプトを記述して、master ブランチを除くすべてのローカルブランチを Git で削除します。
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -D
このスクリプトは、マージされていないブランチを含む、master ブランチを除くすべてのローカルブランチを削除します。
このスクリプトを分解して、どのように機能するかを見てみましょう。
-
for-each-refは、リポジトリ内のすべての参照を繰り返し処理します。format文字列'%refname:short'は、反復可能オブジェクトから短い ref 名を抽出し、refs/headsはそれらのheadsを指します。パイプ
|を使用して、for-each-refの出力をgrepコマンドに渡します。オペレーター。 -
grepコマンドは、渡された参照ヘッドを検索して、式文字列master\|main\|developと照合します。これは、masterブランチのさまざまな名前をカバーしています-それらにmainまたはdevelopという名前を付けている場合があります。 -
grepコマンドの-vオプションは、逆選択用です。したがって、ここでは、式master\|main\|developに一致しないブランチのみを選択します。基本的に、masterを除くすべてのローカルブランチを選択します。 -
最後に、
xargsコマンドは、これらの選択されたすべてのブランチを取得し、それらを引数としてコマンドgit branch -Dに渡します。git branch -Dは、引数として渡されたすべてのブランチを強制的に削除するコマンドです。

Git の -d オプションを使用して、マージされたブランチのみを削除するようにスクリプトを変更する
上記のスクリプトを変更して、マージされたブランチのみを削除できます。最後の -D オプションを -d オプションに置き換えます。
-d はソフト削除オプションであり、マージされたブランチのみを削除します。
git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main\|develop" |
xargs git branch -d

first_branch はマージされていますが、second_branch はマージされていません。

変更したスクリプトは、マージされた first_branch のみを削除し、マージされていない second_branch を残します。
より簡単なスクリプトを使用して、Git 内のすべてのローカルブランチを削除する
上記のスクリプトが複雑すぎてやり過ぎだと感じる人もいるかもしれません。より簡単なスクリプトを使用して同じタスクを実行できます。
git branch | grep -v "master\|main\|develop" | xargs git branch -D
このスクリプトは、複雑な for-each-ref を単純な git branch コマンドに置き換えます。
Git はスクリプトで git ブランチを使用することを推奨していないことに注意してください。ただし、迅速な解決策として、ベストプラクティスから逸脱する場合があります。

スクリプトを変更して、Git の master-prod のような master に似た名前のローカルブランチを削除する
場合によっては、リポジトリに master に似た名前のブランチが含まれていることがあります。たとえば、一部のブランチには、master-prod や master-draft などの名前を付けることができます。
この機能を実現するために、スクリプトの正規表現を"master\|main\|develop"から"master$\|main$\|develop$"に変更できます。
git branch | grep -v "master$\|main$\|develop$" | xargs git branch -D


Git 内のすべてのローカルブランチを削除するための短いスクリプト
巧妙な正規表現を grep に渡して、スクリプトをさらに短くすることができます。
git checkout master
git branch | grep -v "^*" |xargs git branch -D
式"^*"は、現在のブランチ(*)で始まるすべてのブランチ(^)を意味します。最初に git checkout master を実行したので、現在のブランチは master です。
したがって、-v "^*"は現在のブランチである master を除外し、他のすべてのローカルブランチを削除します。

Git 内のすべてのローカルブランチを削除するための 1 行のハード削除コマンド
最後に、約束どおり、Git 内のすべてのローカルブランチを削除するための 1 行のハード削除コマンドを示します。
git branch -D $(git branch)
このコマンドは、現在のブランチを除くすべてのブランチを削除します。
