7
2

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.

よりそうAdvent Calendar 2023

Day 8

GitHub で特定ブランチにマージされたブランチを自動削除したい

Last updated at Posted at 2023-12-07

ブランチ戦略を用いて開発を行なっていると、すでに不要になったブランチが削除されずに放置され、気づくと膨大なブランチ数になっていたりします。かといって、手動で毎回消すのも面倒ですよね。

今回は、そんな放置ブランチ削除の自動化をGithub Actionsで実現する方法を記事にしました。

GitHub 標準の自動機能

GitHub にはプルリクエストがリポジトリにマージされた際にブランチを自動的に削除する機能があります。
https://docs.github.com/ja/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-the-automatic-deletion-of-branches

しかし、こちらの機能では、マージ先がどのブランチであっても削除されてしまうため、1つのブランチを複数ブランチにマージするブランチ戦略を取った場合の運用には適していません。
そこで GitHub Actions を用いて、独自の自動削除を実現することにしました。

特定のブランチにマージされたブランチを自動削除

方法は、非常に単純で、以下のコマンドを Github Actions で実行するだけです。

git branch -r --merged=main | grep -vE '^\s*origin/(main$|develop$|HEAD$)' | sed 's/origin\///' | xargs git push --delete origin

このコマンドでは、mainブランチにマージされたdevelop以外のブランチを全て削除します。

  1. mainにマージされたブランチを取得
    git branch -r --merged=main
  2. 削除しないブランチ(ここでは、main, develop)を除外
    grep -vE '^\s*origin/(main$|develop$|HEAD$)'
  3. 取得したブランチ名から origin を削除
    sed 's/origin\///'
  4. 3でフォーマットされたブランチ名に対応するブランチを全て削除
    xargs git push --delete origin

Github Actions 定義

main ブランチへのプッシュ時にmainブランチにマージされたブランチを削除するGithub Actionsの実際の定義です。

name: "Delete Merged Main Branches"
on:
  push:
    branches:
      - main

jobs:
  delete:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v4
      with:
        # 全てのブランチ一覧を取得
        fetch-depth: 0
    - name: Delete Branches
      run: |
        git branch -r --merged=main | grep -vE '^\s*origin/(main$|develop$|HEAD$)' | sed 's/origin\///' | xargs git push --delete origin

最後に

今回は、ブランチの自動削除を GitHub Actions で実現しました。実行するコマンドを修正すれば、さまざまな条件に対応できると思います。

GitHub Actionsを使えば、ブランチ操作や GitHub の面倒な作業を自動化できるので今後も積極的に使っていきたいですね。

7
2
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
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?