Pull Requestがマージされた時に自動でブランチを削除するようにしてみた

GithubでPull Requestがマージされた後ブランチを毎回削除するのが面倒だったので、自動で削除されるようにしてみました。

また、Git-flow運用している場合、develop,stagingのようなブランチからPRを出す場合があるので、これらのブランチからPul lRequestを出した際は、削除されないようにしておきます。

参考にしたGithubのヘルプのURLも掲載しておきます。

help.github.com

※この設定は2020/5/13時点の情報であり、今後Githubの仕様変更などにより画面・設定方法が変わる可能性があります。

Github上の設定

Pull Requestがマージされた時に自動削除されるように設定する

マージされた時にブランチが削除されるように設定します。プロジェクトの「Settings」=>「Options」を選択し f:id:moritamorie:20200513203628p:plain

「Automatically delete head branches」 をチェックします。保存ボタンはないので、チェックを付けた時点で反映されます。 f:id:moritamorie:20200513195126p:plain

マージすると以下のfeature/branchブランチが自動削除されます。 f:id:moritamorie:20200513200443p:plain

ただ、多くのプロジェクトではGit-flow運用していて、developやstagingからPull Requestを出すことがあると思います。このままだとこれらのブランチが自動削除されてしまうので、「Branch protection rules」を設定し、ブランチが削除されないようにします。

消えてほしくないブランチを保護する

Githubのドキュメントによると

保護されたブランチは、GitHub Free 及びGitHub FreeのOrganizationではパブリックリポジトリでのみ使用でき、GitHub Pro、GitHub Team、GitHub Enterprise Cloud、GitHub Enterprise Server ではパブリックおよびプライベートリポジトリで使用できます。

という記載があり、事前に

  • アカウント課金する
  • 該当リポジトリをパブリックにする

など対応が必要です。

設定は、プロジェクトの「Settings」 => 「Branches」を選択し、「Add rule」でブランチ毎にルールを追加します。 f:id:moritamorie:20200513201831p:plain

ブランチのそれぞれで、「Allow deletions」のチェックを外すと、「Automatically delete head branches」を設定してあっても、自動削除されなくなります。 f:id:moritamorie:20200513201935p:plain

また、デフォルトブランチに設定してある場合も自動削除されなかったので、もしdevelopブランチがデフォルトになっているようであれば、developブランチは「Allow deletions」の設定はなくても大丈夫です。

確認

設定完了後、以下のようにPRを出して、feature/branchブランチのみが削除されることを確認できます。

  • feature/branchブランチ から developブランチにPull Requestを出す
    • => feature/branchブランチが自動削除される
  • developブランチ からstagingブランチにPull Requestを出す
    • => いずれのブランチも自動削除されない
  • stagingブランチ からmasterブランチにPull Requestを出す
    • => いずれのブランチも自動削除されない

参考

「Automatically delete head branches」のhead branchesってどういう意味だろうと思い、Stack overflowで調べてみたところチェックアウトしたブランチのことのようです。

stackoverflow.com

Githubでは、Pull Requestを出した時の元のブランチのことをHead Branchと呼ぶのかー、と勉強になりました。