「mainブランチにpushしちゃった。。。」
とか
「レビューされてないのにPRマージしちゃったよ。。」
といったミスをしたことがある方がいるのではないでしょうか?
いくら気を付けていても人間なのでミスはします。
なので、システム的に防げるように
GitHubで保護ブランチへの直pushを禁止&レビュー必須を設定していきます
公式ドキュメント
・保護ブランチについて(⇒設定できるルールについて書かれています)
・ブランチ保護ルールを管理する(⇒設定方法について書かれています)
設定要件
mainブランチに対して以下のブランチ保護ルールを設定します
- マージ前にPull Requestのレビュー必須
- 最低1人のApproveがないとマージできない
- 追加コミットがあった場合は再度レビュー必須
- 管理者に対しても有効
- 強制pushと削除を無効
設定してみる
GitHubで設定したリポジトリのページを開き、
Settings -> Branches -> Branch protection rules に遷移します
「Add branch protection rule」をクリックしてブランチ保護ルールを設定します
mainブランチに対してブランチ保護ルールを適用する
Branch name pattern に main と入力します
マージ前にPull Requestのレビュー必須
Require a pull request before merging にチェックを入れます
最低1人のApproveがないとマージできない
Require approvals にチェックを入れ、
Required number of approvals before merging を 1 にします
追加コミットがあった場合は再度レビュー必須
Dismiss stale pull request approvals when new commits are pushed にチェック
管理者に対しても有効
Do not allow bypassing the above settings にチェックをいれる
強制pushと削除を無効
Allow force pushes と Allow deletions にチェックを入れない
最後に「Create」をクリックしてルールを作成します
動作確認
空のコミットをプッシュして動作確認してみます
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// mainブランチか確認 $ git branch * main // 空のコミットを作成 $ git commit --allow-empty -m "test_commit" [main ff95cf8] test_commit // mainブランチにpush $ git push Enumerating objects: 1, done. Counting objects: 100% (1/1), done. Writing objects: 100% (1/1), 187 bytes | 15.00 KiB/s, done. Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 remote: error: GH006: Protected branch update failed for refs/heads/main. remote: error: Changes must be made through a pull request. To https://github.com/*******/**********************.git ! [remote rejected] main -> main (protected branch hook declined) error: failed to push some refs to 'https://github.com/*******/**********************.git' // ↑のようにエラーになりpushできない // 後片付け:空のコミットを取り消しておく $ git reset --soft HEAD^ |
次にPRの方を確認していきます
ブランチをきって、pushします
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ git checkout -b test_commit Switched to a new branch 'test_commit' $ git commit --allow-empty -m "test_commit" [test_commit 6a683e2] test_commit $ git push origin test_commit Enumerating objects: 1, done. Counting objects: 100% (1/1), done. Writing objects: 100% (1/1), 187 bytes | 17.00 KiB/s, done. Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 remote: remote: Create a pull request for 'test_commit' on GitHub by visiting: remote: https://github.com/******/***************/pull/new/test_commit remote: To https://github.com/******/***************.git * [new branch] test_commit -> test_commit |
PRを作ってみると、下記のように「Merge Pull Request」がクリックできなくなっています
参考記事
コメント