1. ホーム
  2. git

[解決済み] ローカルのgitブランチをすべて削除

2022-03-20 08:44:04

質問

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

怠け癖や忘れ癖が重なると、大量のローカルブランチができ、そのうちのいくつかは(spikesのように)マージされていない可能性があります。

すべてのローカルブランチをリストアップする方法と、1つのブランチを削除する方法は知っていますが、すべてのローカルブランチを削除できる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
ウブントゥ10.04
GNU bash, バージョン 4.1.5(1)-release
GNU grep 2.5.4

解決方法は?

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).