5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ローカルのGitブランチを一括削除する

Posted at

mainブランチ以外(checkoutしているブランチ以外)を一括削除する

mainブランチに移動してから削除コマンド実行します。
すると現在選択中のmain以外のブランチが削除されます。

$ git checkout main
$ git branch | xargs git branch -d

-d の場合マージしていないブランチは消えません。
https://tracpath.com/docs/git-branch/

-d, --delete
ブランチを削除します。ブランチはアップストリームブランチで完全にマージする必要があります。アップストリームが—trackまたは--set-upstream-toで設定されていない場合、HEADでマージする必要があります。

$ git branch | xargs git branch -d
error: The branch 'hoge' is not fully merged.
If you are sure you want to delete it, run 'git branch -D hoge'.

-D にすることで強制的に削除できます。

$ git branch | xargs git branch -D

削除したくないブランチを指定したい場合

mainブランチとfugaブランチ以外を削除します。

$ git branch | grep -v "main\|fuga" | xargs git branch -d

コマンド解説

git branchでローカルにあるブランチが全て出力されます。

$ git branch                       
  fuga
  hoge
* main

grepを使うことで検索することができます。

$ git branch | grep fuga
  fuga

grep -vは選択したもの以外を表します。

$ git branch | grep -v fuga
  hoge
* main

複数選択したい場合は正規表現で表します。

$ git branch | grep -v "main\|fuga"
  hoge

こちらの正規表現は簡易的なので例えばmain-01、やhogefugaとも一致してしまいます。
もしもmainとfugaのみに完全一致するように正規表現を表記するならば以下のようになります。

$ git branch | grep -v "^\(  \|* \)\(main\|fuga\)$"
  hoge

xargsコマンドで左のコマンドの結果を右のコマンドの引数に渡すことができます。
echo mainの結果はmain となり、それを git checkout コマンドの引数に渡すことで git checkout main が実行されています。

$ echo main | xargs git checkout
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

よって以下のコマンドはgit branchからgrepを使って絞り込みをし、その結果をgit branch -dの引数に渡すことで、ブランチの削除を実行しています。

$ git branch | grep -v "main\|fuga" | xargs git branch -d
5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?