Gitでブランチを切って開発しているとローカルブランチはすぐに複数増えてしまいます。今回の記事では、リモートリポジトリが存在しない場合にローカルブランチもワンライナーで削除するためのメモ。
環境
- Git
- 2.34.1
- WSL
- Ubuntu 22.04.4 LTS
ゴール
マージや削除されたリモートリポジトリがある場合、ローカルのリポジトリも削除するのをワンライナーで行う。
コマンド
# マージ済(ローカル修正がない場合)のみ削除 git fetch --prune && git branch -vv | grep 'gone]' | awk '{print $1}' | xargs git branch -d # ローカル修正があっても削除する git fetch --prune && git branch -vv | grep 'gone]' | awk '{print $1}' | xargs git branch -D
解説
ChatGPT
に解説してもらうのが一番分かりやすいと思うので、コマンドを貼り付けて解説してもらったものを転記しています。
- git fetch --prune
- リモートリポジトリからリモートブランチの更新を取得するコマンドです。--pruneオプションを追加することで、リモートで削除されたブランチの情報をローカルでも更新します。
- git branch -vv
- 各ローカルブランチの情報を詳細に表示します。このコマンドにより、ローカルブランチがどのリモートブランチを追跡しているか、そしてリモートブランチが存在するかどうか(goneと表示される)が分かります。
- grep 'gone]'
- grep コマンドは指定したパターンが含まれる行をフィルタリングします。この場合、'gone]'という文字列が含まれる行を抽出します。これは、対応するリモートブランチが消去されたことを示します。
- awk '{print $1}'
- awkコマンドはテキストをパースしたり整形したりするのに使います。'{print $1}'は各行の1番目のフィールド(つまりブランチ名)を出力します。
- xargs git branch -d
- xargs コマンドは、標準入力から文字列を読み込んで、その文字列を他のコマンドの引数として使います。ここでは、抽出したブランチ名が git branch -d (ブランチの削除コマンド)の引数として渡されます。また、-dオプションは、ブランチがすでにマージされている場合にのみ、ブランチを削除します。
終わりに
面倒だったので定期的に全てのブランチを一掃していましたが、ワンライナーで覚えたおかげで必要なブランチだけを削除できるようになって便利です。