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

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

私は、新しい機能やストーリー カードごとに新しいローカル ブランチを作成する開発プロセスに従います。完了したら、ブランチをマスターにマージしてプッシュします。

怠惰や忘れっぽさが重なって、時間が経つにつれてローカル ブランチの大きなリストができてしまい、その一部 (スパイクなど) がマージされていないという状況になりがちです。

すべてのローカル ブランチを一覧表示する方法と、単一のブランチを削除する方法は知っていますが、すべてのローカル ブランチを削除できる git コマンドがあるかどうか知りたいです。

以下はコマンドの出力ですgit branch --merged

user@machine:~/projects/application[master]$ git branch --merged
  STORY-123-Short-Description
  STORY-456-Another-Description
  STORY-789-Blah-Blah
* master

grep -v \*(以下の回答に従って)リストされているブランチを削除しようとすると、エラーが発生します。

error: branch 'STORY-123-Short-Description' not found.
error: branch 'STORY-456-Another-Description' not found.
error: branch 'STORY-789-Blah-Blah' not found.

私が使用しているのは:

git 1.7.4.1  
ubuntu 10.04  
GNU bash, version 4.1.5(1)-release  
GNU grep 2.5.4  

ベストアンサー1

'git branch -d' サブコマンドは複数のブランチを削除できます。したがって、@sblom の回答を簡略化しますが、重要な xargs を追加します。

git branch -D `git branch --merged | grep -v \* | xargs`

または、さらに簡略化すると次のようになります。

git branch --merged | grep -v \* | xargs git branch -D 

重要なのは、@AndrewC が指摘git branchスクリプトでの使用は推奨されません。これを避けるには、次のようにします。

git for-each-ref --format '%(refname:short)' refs/heads | grep -v "master\|main" | xargs git branch -D

削除には注意が必要です!

$ mkdir br
$ cd br; git init
Initialized empty Git repository in /Users/ebg/test/br/.git/
$ touch README; git add README; git commit -m 'First commit'
[master (root-commit) 1d738b5] First commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README
$ git branch Story-123-a
$ git branch Story-123-b
$ git branch Story-123-c
$ git branch --merged
  Story-123-a
  Story-123-b
  Story-123-c
* master
$ git branch --merged | grep -v \* | xargs
Story-123-a Story-123-b Story-123-c
$ git branch --merged | grep -v \* | xargs git branch -D
Deleted branch Story-123-a (was 1d738b5).
Deleted branch Story-123-b (was 1d738b5).
Deleted branch Story-123-c (was 1d738b5).

おすすめ記事