GitHub:プッシュ保護にプッシュを止められた
プッシュ保護は、対応するシークレットを含むプッシュを、リポジトリに届く前に止めるシークレットスキャンの機能です。止めるのは、コマンドラインからのプッシュ、GitHub の画面でのコミット、ファイルのアップロード、REST API への要求です(GitHub の説明「プッシュ保護」・2026年10月27日に確認)。プルリクのブランチもほかと同じくプッシュするので、プッシュのどれか1つのコミットにシークレットがあればプッシュ全体が止まり、メッセージはシークレットのあるコミットと場所をすべて挙げます。
git push blocked: commit and path of each secret, and a URL PUT /repos/OWNER/REPO/contents/PATH 409 POST /repos/OWNER/REPO/git/blobs 409 POST /repos/OWNER/REPO/secret-scanning/push-protection-bypasses
どこが止めているか
- リポジトリのプッシュ保護:GitHub Secret Protection が要り、既定では無効です。有効にできるのはリポジトリの管理者・組織のオーナー・セキュリティマネージャー・Enterprise のオーナーです。守っているリポジトリへのシークレットを含むプッシュを止め、回避すると Security and quality タブにアラートができます。
- ユーザーのプッシュ保護:GitHub.com だけにあり、自分のアカウントで既定で有効です。公開リポジトリへシークレットをプッシュするのを止めます。回避に理由は要らず、リポジトリのプッシュ保護も有効でない限りアラートはできません。
- GitHub の画面:GitHub でファイルを作る・直す・アップロードするときも同じく止まり、見つかったシークレットは1つずつ出ます。リポジトリにもうアラートがあるシークレットは止まりません(GitHub の説明「GitHub の画面でのプッシュ保護」)。
- REST API:「Create a blob」と「Create or update file contents」にはプッシュ保護があり、要求の中身に対応するシークレットがあると 409 を返します(GitHub の説明「REST API でのプッシュ保護」)。
直す所
- すべてのコミットからシークレットを消す:最新のコミットで足したなら、消して
git commit --amend --allを実行し、プッシュします。前のコミットにもあるなら、メッセージに挙がった一番古いコミットを見つけ、git rebase -i COMMIT-ID~1を始めてそのコミットのpickをeditに変え、シークレットを消してgit add .・git commit --amend・git rebase --continueの後にプッシュします(GitHub の説明「コマンドラインでのプッシュ保護」)。 - 回避する:既定では、リポジトリへの書き込み権限がある人なら誰でも、理由を付けてプッシュ保護を回避できます。止められたプッシュが返した URL を、プッシュした本人のユーザーで開き(ほかの人には 404)、It's used in tests・It's a false positive・I'll fix it later のどれかを選んで Allow me to push this secret を押し、3時間以内にもう一度プッシュします。
- 残るアラート:used in tests と false positive は閉じたアラートを、I'll fix it later は開いたアラートを作ります。シークレットスキャンのアラートの解決を求めるルールセットはシークレットスキャンのアラートを参照。
- 回避の選択肢が無い:リポジトリが委任の回避を使っています。同じ URL から、コメントを付けて回避の権限を申請します。レビューする人が承認か却下をし、答えはメールで届きます。申請は7日で期限が切れます。承認されれば、そのコミットと、同じシークレットを含む後のコミットをプッシュできます。
- REST API から:シークレットを消すか、
POST /repos/OWNER/REPO/secret-scanning/push-protection-bypassesにreason(false_positive・used_in_tests・will_fix_later)と、プッシュ保護のある経路が返すplaceholder_idを送ります。シークレットをコミットした本人である必要があり、権限が足りなければ 403、プレースホルダーが見つからないかプッシュ保護が無効なら 404 です(GitHub の説明「プッシュ保護の回避を作る」)。 - 別の止まり方:ファイルのパス・拡張子・大きさで断られたプッシュはプッシュのルールセットです。プッシュのルールを参照。
IntelliJ IDEA で GitHub のプルリクを見るなら
Lesstep の Pull Request Inbox for GitHub は、JetBrains IDE(2024.1 以降)のプラグインです。プルリクのレビュー・チェック・会話を差分の隣に出し、対象のブランチが許す方法でマージします。コミットのプッシュもファイルの書き込みもしないので、プッシュ保護に止められることはありません。IDE からのブランチのプッシュは Git のプッシュで、止められたときの GitHub のメッセージにコミット・場所・回避の URL が出ます。受信箱・差分・会話は無料、承認・コメント・解決・マージは 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 でコミットのメタデータの規則がマージを止める · GitHub で強制 push が止められる · GitHub でプルリクをマージしても issue が閉じない · GitHub のプルリクを手元にチェックアウトできない · GitHub のプルリクがマージ先と衝突している · GitHub で変更を依頼された・レビューを取り消す · GitHub で共同作者がコミットに数えられない · GitHub で依存関係のレビューのチェックが失敗する · GitHub で Dependabot がプルリクをリベースしない · 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