ローカル環境にたくさんできてしまったブランチを整理するためのTipsを紹介します。
今回の対象はローカル環境のみです。リモートリポジトリのブランチ削除については言及しません。
目次
Gitブランチの削除方法のおさらい
ブランチを削除するgitコマンド
fooというブランチを強制的に削除するコマンドは以下の通りです。
$ git branch -D foo
or
$ git branch --delete –force foo
マージされている場合のみ削除するコマンドは以下の通りです。
$ git branch -d foo
or
$ git branch --delete foo
ブランチを一括で削除するgitコマンド
foo・barというブランチを一括で強制削除するコマンドは以下の通りです。
$ git branch -D foo bar
or
$ git branch --delete –force foo bar
特定のGitブランチ以外を削除する方法
mainブランチ以外を一括で削除するgitコマンド
mainブランチ以外を一括で強制削除するコマンドは以下の通りです。
git branch | grep -v main
でmain以外のブランチ名を取得し、xargs
を利用してgit branch -D
にブランチ名を渡しています。
$ git branch | grep -v main | xargs git branch -D
複数のブランチ以外を一括で削除するgitコマンド
main・developブランチ以外を一括で強制削除するコマンドは以下の通りです。
grep -v
の対象となる文字列を複数設定しています。
$ git branch | grep -v "main\|develop" | xargs git branch -D
or
$ git branch | grep -v -e main -e develop | xargs git branch -D
or
$ git branch | grep -v main | grep -v develop | xargs git branch -D
『特定のブランチ以外を強制一括削除』をスクリプト化する
『直近で利用した(している)ブランチ以外を一括で削除したい』というケースに開発中よく遭遇したためスクリプト化しました。
以下はスクリプトの紹介になります。
# コマンド名は『'g'it 'br'anch 'd'elete e'x'clude』が由来です。
gbrdx() {
# カレントブランチ(アスタリスクからはじまるブランチ)はブランチ一覧から除外
command="git branch | grep -v '*'"
for branch_name in "$@"; do
command="${command} | grep -v ${branch_name}"
done
command="${command} | xargs git branch -D"
eval ${command}
}
実行結果は以下の通りです。
$ git branch
bar
baz
develop
* foo
main
$ gbrdx main develop
Deleted branch bar (was 57d7203).
Deleted branch baz (was 57d7203).
$ git branch
develop
* foo
main
誤操作を防ぐため、y
の入力を待ってからブランチ削除するようにしたスクリプトは以下になります。
verify_execution() {
echo "Are you sure[y/n]"
read answer
case $answer in
y)
true
;;
*)
false
;;
esac
}
gbrdx() {
command="git branch | grep -v '*'"
for branch_name in "$@"; do
command="${command} | grep -v ${branch_name}"
done
echo 'These branches will be removed.'
eval ${command}
verify_execution
if [ $? -eq 0 ] ; then
command="${command} | xargs git branch -D"
eval ${command}
fi
}
実行結果は以下の通りです。
$ git branch
bar
baz
develop
* foo
main
$ gbrdx main develop
These branches will be removed.
bar
baz
Are you sure[y/n]
y
Deleted branch bar (was 57d7203).
Deleted branch baz (was 57d7203).
$ git branch
develop
* foo
main
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!