私は、新しい機能やストーリー カードごとに新しいローカル ブランチを作成する開発プロセスに従います。完了したら、ブランチをマスターにマージしてプッシュします。
怠惰や忘れっぽさが重なって、時間が経つにつれてローカル ブランチの大きなリストができてしまい、その一部 (スパイクなど) がマージされていないという状況になりがちです。
すべてのローカル ブランチを一覧表示する方法と、単一のブランチを削除する方法は知っていますが、すべてのローカル ブランチを削除できる 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).