Bitbucket:「! [remote rejected] main -> main (pre-receive hook declined)」
Bitbucket は push をブランチの制限と照らし合わせて断りました。Bitbucket のブランチは変わっておらず、コミットは手元のブランチに残っています。多いのは、そのブランチがプルリクエスト経由の変更しか受け付けないか、書き込める人が決まっている場合です。コミットを新しいブランチに載せて push し、プルリクエストを作ります。
メッセージの全体
Bitbucket Cloud(Atlassian 自身の記事にある形):
! [remote rejected] main -> main (pre-receive hook declined) error: failed to push some refs to 'https://bitbucket.org/<ワークスペース>/<リポジトリ>'
古い公開の報告では、その上に remote: permission denied to update branch <ブランチ> の行もあります。
Bitbucket Data Center は理由を書きます(Atlassian のバグ管理にある報告の形):
remote: Branch refs/heads/<ブランチ> can only be modified through pull requests. remote: Check your branch permissions configuration with the project administrator.
上の行に remote: Repository is over the size limit (4 GB) and will not accept further additions. とあるなら、原因はブランチの制限ではなくリポジトリの大きさです。直前の push を取り消す手順へ。
Atlassian が挙げる原因
Bitbucket Cloud について、Atlassian の記事 Unable to push to repository – "pre-receive hook declined" error(2025年9月26日更新)から:
- ブランチの制限。ブランチの書き込みの一覧に、あなた自身もあなたのグループも入っていません。リポジトリの管理者がリポジトリの設定の Branch restrictions で決めます。全員にマージを許しつつ、プルリクエスト経由だけにすることもできます。force push には Allow rewriting branch history も要ります。
- アクセストークン。Atlassian の記事は、制限のあるブランチへリポジトリ・プロジェクト・ワークスペースのアクセストークンで push することはできないとしています。これは2026年9月15日に変わり、リポジトリの管理者がブランチの制限で、そのアクセストークン(と Forge アプリ・Rovo Dev)をブランチの書き込みアクセスやマージアクセスに足せるようになりました。リポジトリとプロジェクトの制限の両方です(Bitbucket Cloud の変更履歴。機能要望 BCLOUD-22400 は修正済みで閉じられています)。トークンがその一覧に入るまでは、自分のアカウントで push します。
- ワークスペースの SSH キー。キーをアカウントではなくワークスペースに登録しているなら、個人の SSH キーへ移します。
- 署名付きのコミット(Premium)。リポジトリが検証済みの署名を求めているなら、GPG キーでコミットに署名します。
Bitbucket Data Center では、制限の名前は Prevent changes without a pull request で、ブランチへの直接の push を止めます。プロジェクトかリポジトリの管理者が、ユーザー・グループ・アクセスキーを例外にできます(Using branch permissions)。
コミットをプルリクエストへ移す
# 1. コミットを新しいブランチに載せる(そのブランチに移る) git switch -c my-change # 2. 新しいブランチを push する git push -u origin my-change # 3. 手元の main を、サーバーにある位置へ戻す git branch -f main origin/main
この3つは、main への push を断る手元の git サーバーで実際に動かしました。その断りは Bitbucket Cloud と同じ ! [remote rejected] main -> main (pre-receive hook declined) でした。コミットはサーバーの my-change に載り、手元の main は origin/main と同じ位置に戻りました。3 は 2 が成功してから行います。Git 2.23 より古ければ、1 は git checkout -b my-change です。
そのあと、my-change から main へのプルリクエストを作ります。Bitbucket Cloud では Create → Pull request で項目を埋め、Create pull request を押します。新しいブランチまで断られるなら、制限が main 以外にも掛かっています(Atlassian の制限は release/* のような名前の型にも掛けられます)。push してよいブランチの名前を、リポジトリの管理者に確かめます。
IntelliJ IDEA から Bitbucket のプルリクエストを作るなら
Pull Request Inbox for Bitbucket は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。Bitbucket Cloud と Data Center で、Git メニューに Bitbucket のプルリクエストを作成… を足します。今いるブランチから、選ばなければリポジトリのメインのブランチへ、プルリクエストを作ります。ブランチがまだ Bitbucket に無ければそう伝えて、先に IDE の push の画面を開きます。プルリクエストの作成・承認・マージは Pro(月 US$1.50・30日間の無料試用つき)、受信箱は無料です。画面は日本語です。
Bitbucket と Atlassian は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:パイプラインからの push で同じく断られる:「Permission denied to update branch」 · IntelliJ IDEA の Bitbucket プルリク用プラグインの比較 · English