Git 内のすべてのローカルブランチを削除する

Ankit Raj Goyal 2023年1月30日
  1. master を除く Git のすべてのローカルブランチを削除するための詳細なスクリプト
  2. Git の -d オプションを使用して、マージされたブランチのみを削除するようにスクリプトを変更する
  3. より簡単なスクリプトを使用して、Git 内のすべてのローカルブランチを削除する
  4. スクリプトを変更して、Git の master-prod のような master に似た名前のローカルブランチを削除する
  5. Git 内のすべてのローカルブランチを削除するための短いスクリプト
  6. Git 内のすべてのローカルブランチを削除するための 1 行のハード削除コマンド
Git 内のすべてのローカルブランチを削除する

古いローカルブランチはローカルリポジトリを乱雑にしますが、それ以上の価値はありません。このチュートリアルを使用すると、すべてのローカルブランチを一度に削除できます。

このタスクのスクリプトを作成するには、grepxargsfor-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 ブランチを除くすべてのローカルブランチを削除します。

このスクリプトを分解して、どのように機能するかを見てみましょう。

  1. for-each-ref は、リポジトリ内のすべての参照を繰り返し処理します。format 文字列'%refname:short'は、反復可能オブジェクトから短い ref 名を抽出し、refs/heads はそれらの heads を指します。

    パイプ|を使用して、for-each-ref の出力を grep コマンドに渡します。オペレーター。

  2. grep コマンドは、渡された参照ヘッドを検索して、式文字列 master\|main\|develop と照合します。これは、master ブランチのさまざまな名前をカバーしています-それらに main または develop という名前を付けている場合があります。

  3. grep コマンドの -v オプションは、逆選択用です。したがって、ここでは、式 master\|main\|develop に一致しないブランチのみを選択します。基本的に、master を除くすべてのローカルブランチを選択します。

  4. 最後に、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-prodmaster-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)

このコマンドは、現在のブランチを除くすべてのブランチを削除します。

1 行のハード削除

関連記事 - Git Branch