GitHub:コミットのメタデータの規則がマージや push を止める
GitHub Enterprise のプランの組織は、コミットのメタデータの書き方を決める規則を足せます。対象はコミットのメッセージ・作者のメール・コミッターのメールと、新しいブランチとタグの名前です。規則に合わないコミットでブランチやタグを更新しようとすると、何が悪かったかを伝えるエラーが出ます。push したときはコマンドラインに、コミットを作ったりプルリクをマージしたりしたときは GitHub の上に出ます(GitHub の説明「ルールセットで使える規則」・2026年10月26日に確認)。
{ "type": "commit_message_pattern",
"parameters": { "name": "Issue key", "operator": "starts_with",
"pattern": "SHOP-", "negate": false } }
規則
- 5つの種類:REST API では
commit_message_pattern・commit_author_email_pattern・committer_email_pattern・branch_name_pattern・tag_name_patternです。どれもoperator(starts_with・ends_with・contains・regex)とpattern、任意のname、「〜してはいけない」を表すnegateを持ちます(GitHub の説明「ルールの REST API」)。 - 文字どおりのパターン:「Must start with a matching pattern」のようなたいていの条件では、パターンは文字どおりに読まれ、ワイルドカードは使えません。
*はただの*の文字です。 - 正規表現:「Must match a given regex pattern」か「Must not match a given regex pattern」を選ぶと、RE2 の書き方が使えます。既定では複数の行を見ません。
^ABCは、1行目がABCで始まる複数行のメッセージに合い、(?m)で始めると行をまたいで合わせます。否定の先読み?!は使えません。行末の印には、$だけでなく\n?$を使うよう GitHub は勧めています。Git の push やコマンドラインの流れでは、末尾に改行が付くことがあるためです(GitHub の説明「コミットのメタデータの正規表現」)。 - サインオフ:コミットのサインオフが必須だと、GitHub はコミットのメッセージに
Signed-off-by: 名前 <メール>のような行を足すので、パターンとぶつかることがあります。
効き方
- 止めるのは push でなくブランチの更新:規則に合わないコミットを含む push は断られませんが、対象のブランチやタグは更新されません。コミットはリポジトリに入って開くこともできますが、ブランチやタグの履歴にはつながりません。同じ push のほかのブランチやタグは、そのコミットが規則に合えば更新されます。
- 新しいコミットだけ:既にあるブランチやタグに規則を足すと、それ以降に push される新しいコミットに効き、既にある履歴には効きません。
- スカッシュマージ:GitHub の説明は、スカッシュマージではプルリクの個々のコミットは見ず、できる1つのコミットのメタデータだけを確かめ、プルリクの画面がマージを許す前にそれを確かめる、としています。同じ節の注記は、ブランチをスカッシュマージするなら、そのブランチのコミットはすべて対象のブランチのメタデータの条件を満たす必要がある、としています。
- GitHub の上でのマージ:コミッターのメールの規則では、ウェブでのマージや GitHub の上で作られるほかのコミットのために、パターンが
noreply@github.comも含む必要があります。
直す所
- エラーのパターンを読む:コミットが断られると、メタデータが合うべきパターンがメッセージに出ます(GitHub の説明「ルールのトラブルシューティング」)。
- コミットを作り直す:Git のコミットは変えられないので、作った後でメタデータを書き換えることはできません。リベースしてコミットをまとめるか、1つずつ書き直してから、新しいコミットを push する必要があることがあります。
- スカッシュマージでは:GitHub はできるコミットを確かめるので、マージで付けるコミットのタイトルを、メッセージが規則に合うように書きます。コミッターのメールの規則があるなら、それが
noreply@github.comを認めているかを確かめます。 - 規則を探す:リポジトリを読める人なら誰でも、有効なルールセットを見られます。リポジトリの設定の Rules → Insights には、ルールセットで確かめた操作と、失敗した操作ではどの規則が失敗したかが出ます(GitHub の説明「リポジトリのルールセットの管理」)。
- 管理者なら:GitHub は、メタデータの規則をすべての作業ブランチでなく、
mainだけのような限られたブランチに置き、そこへはプルリクを必須にするよう勧めています。まず「Evaluate」の状態で試すと、規則が有効だったら通ったか失敗したかが Insights に出ます。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に出し、対象のブランチが許す方法でマージします。マージの画面は、対象のブランチのコミットのメタデータの規則をコミットのタイトルの下に出し、どう書いても規則に合わないタイトル(決められた始まりでない、含んではいけない文字を含む)はその場で止めます。コミッターのメールの規則が noreply@github.com を認めていなければ、そう伝えます。規則を最後に確かめるのは GitHub です。受信箱・差分・会話は無料、承認・コメント・解決・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GitHub は GitHub, Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitHub, Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitHub のマージの断り(405・409) · GitHub のレビューの断り(422) · GitHub の検索の 422「Validation Failed」 · 「Resource not accessible by personal access token」 · 401「Bad credentials」 · 「Resource protected by organization SAML enforcement」 · 「API rate limit exceeded」 · GitHub の差分の 406「too_large」・3,000件 · GitHub の行のコメントの 422「must be part of the diff」 · GitHub のブランチの更新の断り(422) · GitHub のプルリクが作れない(422・403) · GitHub の自動マージの断り · GitHub の下書き・レビュー準備完了・閉じるの断り · GitHub の会話の解決の断り · GitHub のチェックが出ない(check runs の 403) · GitHub のファイルの中身が読めない · GitHub の比較の断り(404・422) · GitHub のコメント・返信の断り(ロック・アーカイブの 403) · GitHub のマージの方法の断り(405) · GitHub のブランチが見つからない(404・301) · GitHub Enterprise Server につながらない · GitHub のレビューの依頼が出ない · GitHub のプルリクの一覧が足りない · GitHub の 404・名前を変えたリポジトリ(301・307) · GitHub の行のコメントが outdated・差分に無い · GitHub のプルリクの更新・通知が遅い · GitHub の変更の提案が適用できない · GitHub の必須チェックが Expected のまま · GitHub でコードオーナーのレビューが要る · GitHub で未解決の会話がマージを止める · GitHub で署名の無いコミットがマージを止める · GitHub のマージキューでマージするブランチ · GitHub でマージが最後の push の承認を待っている · GitHub でマージがコードスキャンの結果を待っている · GitHub でマージがコード品質の結果を待っている · GitHub でコードのカバレッジの水準がマージを止める · GitHub でライセンスの適合の結果がマージを止める · GitHub でブランチのロックや更新の制限がマージを止める · GitHub でマージの後にブランチが消えない · GitHub でチームの承認(Required reviewers)がマージを止める · GitHub でシークレットスキャンのアラートがマージを止める · GitHub でスタックしたプルリクがマージできない · GitHub で push の規則が push を止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · GitHub でフォークが同期できない · GitHub でプルリクのベースのブランチを変えられない · GitHub でプルリクを取り消せない · GitHub でプルリクのテンプレートが出ない · GitHub でプルリクにラベルや担当者が付かない · GitHub でプルリクを閉じられない・開き直せない · GitHub でプッシュ保護にプッシュを止められた · GitHub でプルリクのコメントが隠された · GitHub でデプロイが成功するまでプルリクをマージできない · GitHub でチームに頼んだレビューがメンバーに置き換わった · GitHub でプルリクのファイルの Viewed が外れた · GitHub でマージしていないプルリクがマージ済みになった · GitHub で Copilot のレビューが承認に数えられない · GitHub でワークフローが作ったプルリクのチェックが動かない · GitHub でプルリクに Update branch のボタンが出ない · GitHub で Dependabot のプルリクのチェックが失敗する · GitHub でフォークからのプルリクのチェックが失敗する · GitHub でコミットメッセージの [skip ci] でチェックが動かない · GitHub で保存期間を過ぎてチェックが消えた · GitHub の公開リポジトリのコードレビューの制限 · GitHub でリポジトリのプルリクがオフ・制限されている · GitHub でスタックのプルリクごとにチェックが走る · GitHub でスカッシュでマージ済みのコミットが次のプルリクに出る · GitHub のプルリクでファイルの差分が出ない · GitHub でフォークのプルリクのブランチに push できない · GitHub のプルリクのチェックが取り消された · GitHub で Rebase and merge が使えない · GitHub のマージのコミットメッセージが思った形にならない · GitHub のプルリクでファイルの全行が変わったと出る · GitHub の API がタイムアウトした · GitHub のプルリクで画像や文書の差分が見た目で出ない · GitHub のレビューの依頼が断られる(422) · GitHub で Copilot が作ったプルリクのチェックが動かない・承認が数えられない · GitHub の push が GH006・GH013 で断られる · GitHub で承認が足りずマージできない・数に入らない承認 · JetBrains の IDE で GitHub のプルリクを扱う · English