GitHub: a force push is blocked
A force push is a Git push that overwrites the remote repository with local changes without regard for conflicts. GitHub blocks force pushes on all protected branches by default, and a ruleset's "Block force pushes" rule, enabled by default, prevents users from force pushing to the branches or tags it targets (GitHub's about protected branches and available rules for rulesets, checked October 26, 2026).
{ "type": "non_fast_forward" }
// a ruleset rule: prevent users with push access from force pushing to refs
Where force pushes are blocked
- Branch protection: force pushes are blocked on every protected branch unless "Allow force pushes" is selected, under "Rules applied to everyone including administrators". It then lets either everyone with at least write permission force push, admins included, or only the people or teams you specify (GitHub's managing a branch protection rule).
- Rulesets: "Block force pushes" applies to the branches or tags the ruleset targets; in the REST API it is the rule
non_fast_forward(GitHub's REST API endpoints for rules). - Why GitHub blocks them: a force push may remove from the branch's history commits that other collaborators based their work on, which may lead to merge conflicts or corrupted pull requests. Force pushing can also delete branches or point a branch to commits that were not approved in a pull request.
- Other rules still apply: allowing force pushes does not override other rules: if a branch requires a linear commit history, you cannot force push merge commits to it.
- The default branch: when a ruleset blocks force pushes, organization owners and repository administrators cannot change or rename the default branch unless they may bypass the ruleset.
When a pull request needs one
- Rewritten commits: if an unsigned commit was pushed to a branch that requires commit signatures, GitHub says the collaborator will need to rebase the commit to include a verified signature, then force push the rewritten commit to the branch. On a branch that also blocks force pushes, that last step is refused. Commit metadata rules can likewise call for rewriting commits (see commit metadata rules).
- Bringing in the base branch: on the pull request page, "Update branch" merges the base branch into the head branch, and "Update with rebase" rebases your changes onto the latest base branch instead (GitHub's keeping your pull request in sync with the base branch). The REST endpoint "Update a pull request branch" merges the HEAD of the base branch into the pull request branch.
What to do
- Find the rule: anyone with read access can view a repository's active rulesets, and in the repository's settings Rules then Insights shows the actions checked against rulesets and, for a failed one, which rules failed (GitHub's managing rulesets for a repository).
- Ask to be allowed: with branch protection, an administrator can choose the people or teams who may force push; a ruleset can grant bypass permission to roles, teams or apps (GitHub's creating rulesets for a repository).
- Bring in the base branch with a merge: where rebasing the pull request branch would need a force push, "Update branch" (or the REST endpoint) merges the base branch into it instead.
In IntelliJ IDEA: branch protection rules turn off Force Push, rulesets are not loaded
How the Git and GitHub support built into IntelliJ IDEA deal with force pushes to protected branches, in its source (checked November 1, 2026; IntelliJ IDEA: GHProtectedBranchRulesLoader.kt, getProtectionRules.graphql, GithubProjectSettings.kt, GitSharedSettings.java, GitVcsPanel.kt, GitPushSupport.java, ForcePushAction.kt, DvcsBundle.properties, GraphQL files, GithubApiRequests.kt):
- Where its protected branches come from: after a successful fetch, if the Git setting "Load branch protection rules from GitHub" is on (it is by default) and the IDE has a GitHub account for that server, the GitHub support asks GitHub for the repository's branch protection rules and keeps only each rule's branch name pattern. These are added to the protected branches in the Git settings, which are
masterandmainby default. - Force Push: when a target branch matches one of those patterns, the Force Push action of the Push dialog is turned off, and its description becomes "Force push to <target> is prohibited", with where to configure protected branches.
- What it does not load: from each rule it asks only the pattern, not whether the rule allows force pushes, so a branch whose rule allows them is protected in the IDE too. None of its 78 GraphQL files asks for rulesets, and its list of REST requests has nothing for them, so a branch that only a ruleset protects gets no pattern from GitHub. For a pull request it also fetches the base branch's rule, which includes
allowsForcePushes; what the merge check takes from that rule: GitHub: the merge is blocked by unsigned commits.
GitHub pull requests in IntelliJ IDEA
Pull Request Inbox for GitHub, a plugin by Lesstep for JetBrains IDEs 2024.1 or later, shows a pull request's reviews, checks and conversations next to the diff, and merges it with the methods the target branch allows. The plugin does not push or force push: its “Update the branch” uses GitHub's "Update a pull request branch", which merges the base branch into the pull request branch. The review inbox, diffs and conversations are free; approving, commenting, resolving and merging are Pro (US$1.50 a month, with a 30-day trial).
GitHub is a trademark of GitHub, Inc.; IntelliJ IDEA is a trademark of JetBrains s.r.o. This page is not affiliated with or endorsed by GitHub, Inc. or JetBrains.
More: GitHub merge refused (405, 409) · GitHub review refused (422) · GitHub search 422 "Validation Failed" · "Resource not accessible by personal access token" · 401 "Bad credentials" · "Resource protected by organization SAML enforcement" · "API rate limit exceeded" · GitHub diff 406 "too_large", 3,000 files · GitHub line comment 422 "must be part of the diff" · GitHub branch update refused (422) · GitHub pull request not created (422, 403) · GitHub auto-merge refused · GitHub draft, ready for review or close refused · GitHub conversation not resolved · GitHub checks not shown (check runs 403) · GitHub file contents not read · GitHub compare refused (404, 422) · GitHub comment or reply refused (403 locked, archived) · GitHub merge method not allowed (405) · GitHub branch not found (404, 301) · GitHub Enterprise Server not reached · GitHub review request not shown · GitHub pull request list incomplete · GitHub 404 Not Found, renamed repositories (301, 307) · GitHub line comment outdated or not on the diff · GitHub pull requests not updating, notifications late · GitHub suggested change cannot be applied · GitHub required check stuck at "Expected" · GitHub code owner review required · GitHub merge blocked by unresolved conversations · GitHub merge blocked by unsigned commits · GitHub branch that merges through a merge queue · GitHub merge waiting for an approval of the most recent push · GitHub merge waiting for code scanning results · GitHub merge waiting for code quality results · GitHub merge blocked by a code coverage threshold · GitHub merge blocked by license compliance results · GitHub branch locked or its updates restricted · GitHub branch not deleted after merging · GitHub merge waiting for a team's approval (Required reviewers) · GitHub merge blocked by secret scanning alerts · GitHub stacked pull request not merging · GitHub push blocked by push rules · GitHub merge blocked by commit metadata rules · GitHub issue not closed by a merged pull request · GitHub pull request not checked out locally · GitHub pull request has merge conflicts · GitHub changes requested and dismissing a review · GitHub co-author not credited for a commit · GitHub dependency review check failed · GitHub Dependabot not rebasing its pull request · GitHub fork not syncing with upstream · GitHub pull request base branch not changing · GitHub pull request not reverting · GitHub pull request template not showing · GitHub pull request labels or assignees not added · GitHub pull request not closing or reopening · GitHub push blocked by push protection · GitHub pull request comment hidden · GitHub pull request blocked until deployments succeed · GitHub team review request replaced by members · GitHub pull request file no longer marked Viewed · GitHub pull request marked merged without being merged · GitHub Copilot review does not count as an approval · GitHub checks not running on a pull request a workflow created · GitHub Update branch button not shown on a pull request · GitHub checks failing on a Dependabot pull request · GitHub checks failing on a pull request from a fork · GitHub checks skipped by [skip ci] in a commit message · GitHub checks gone after the retention period · GitHub code review limits in a public repository · GitHub pull requests turned off or limited in a repository · GitHub checks run on every pull request in a stack · GitHub pull request showing commits already squash merged · GitHub pull request not showing a file diff · GitHub push to a pull request branch from a fork refused · GitHub check cancelled on a pull request · GitHub Rebase and merge not available · GitHub merge commit message not what you expected · GitHub pull request shows every line changed · GitHub API request timed out · GitHub pull request image or document diff not shown · GitHub review request refused (422) · GitHub pull request from Copilot: checks not running, approval not counted · GitHub push refused: GH006 and GH013 on a protected branch · GitHub "At least 1 approving review is required", approvals that do not count · GitHub pull request plugins for IntelliJ IDEA, compared · 日本語