これは何
手元に不要なブランチが溜まってきた時に必要なブランチ以外一括で削除したくて色々調べたのですが、そもそもコマンドが全然わからなくて怖かったので調べた記事です。
ということでかなり初心者向けの記事になっております。
何か間違ってるところなどありましたら、編集リクエストやコメントで指摘していただけると大変助かります...!
結論(コマンド)
このコマンドを打てば、特定のブランチ以外のローカルのブランチを削除できます。🔽
git branch -r | grep -v "除外するブランチ名" | xargs git branch -D
"除外するブランチ名"の部分を削除したくないブランチ名に変えて使います
ex) git branch | grep -v master | xargs git branch -D
複数除外したい時はこんな感じです🔽
git branch | grep -v -E "除外するブランチ名A"|"除外するブランチ名B" | xargs git branch -D
ex) git branch | grep -v -E "master|development" | xargs git branch -D
このコマンドで何をしている?
ざっくりやってることはこんな感じです。
-
git branch
- ローカルブランチを取得
-
grep -v -E a|b
- 除外したいブランチをOR条件で複数指定
-
xargs
- 前のコマンドの実行結果を次のコマンドに引数として渡す
-
git branch -D
- ブランチを削除
ここから先はコマンドの細かい解説になるので、そんなの知ってるよという方は読み飛ばしてもらって大丈夫です
git branch
ローカルブランチを取得しています。
grep -v
grep
は正規表現を使って指定したパターンに一致する行を抽出します。
-v
はパターンに一致しない行を表示するオプションです。
なので、この後の"除外するブランチ名"
に一致しない行を抽出しています。
-E "除外するブランチ名A|除外するブランチ名B"
-E
オプションを使うと、grep
で拡張正規表現が使えるようになります。
また、|
(パイプ記号)は正規表現でOR条件になるので、「いずれかに一致」したものを抽出することができます。
Ref Man page of GREP | -E, --extended-regexp
Ref 正規表現言語 - クイック リファレンス | Microsoft Learn
xargs
標準入力(前のコマンドの実行結果)を引数として、次のコマンドを実行します。
なので、今回の場合だとgit branch | grep -v -E "除外するブランチ名A|除外するブランチ名B"
の実行結果である「削除したくないブランチを除外したローカルブランチの一覧」を引数として受け取ってgit branch -D
を実行します。
git branch -D
指定したブランチの削除をします。
コマンド同士を繋いでる|
(パイプ記号)
|
(パイプ記号)は、前のコマンドの出力結果を次のコマンドの入力に渡します。