Few things disrupt a smooth Git workflow like the error message:
error: failed to push some refs to 'origin'
This error often appears when you’re trying to push local changes to a remote repository, but Git encounters a problem syncing your code with the remote counterpart. The reasons can vary—from diverging branches to permission issues—but the good news is that it’s fixable. In this article, we’ll cover the common causes for this error and walk you through multiple ways to resolve it effectively.
What Causes This Git Error?
The “failed to push some refs” message might look intimidating at first glance, but it’s essentially Git telling you: “Your version of the code doesn’t align with what’s on the remote.” Let’s take a closer look at typical reasons for this issue:
- Diverging Histories: Your local branch and the remote branch have diverged—you pushed changes locally while someone else pushed different changes remotely.
- Non-existent Remote References: You’re trying to push refs (branches, tags) that no longer exist or weren’t created locally.
- Permissions Issues: Your Git credentials don’t allow you to push to the specified repository.
- Force Push Needed: Some operations like rebase rewrite the history; pushing rewritten history might need force pushing.
Let’s explore how to fix the error depending on the root cause.
1. Pull Before You Push
The most common fix is also the simplest: just pull the latest changes from the remote before pushing.
git pull origin <branch-name>
This command brings the remote changes into your local branch. If your histories have diverged, Git will either create a merge commit or ask you to resolve conflicts.

After resolving conflicts and committing the merge (if necessary), retry pushing:
git push origin <branch-name>
Note: If you want to avoid merge commits, use git pull --rebase
instead:
git pull --rebase origin <branch-name>
2. Use Force Push (with Caution!)
Sometimes, this error appears right after you’ve rebased your branch. A rebase rewrites commit history, and since Git compares histories carefully, a push from a rebased branch triggers the error.
If you’re aware of the risks and confident no one else is working on the same branch, try a --force
push:
git push --force origin <branch-name>
Warning: Avoid force pushing to shared branches like main
or master
unless you coordinate with your team. You can overwrite others’ code!
For a safer alternative, use:
git push --force-with-lease
This command confirms you’re not overwriting someone else’s work, acting like a safety belt during force pushes.
3. Push the Correct Branch
Another overlooked cause is pushing from the wrong branch. You may have checked out one branch locally but are trying to push changes intended for another.
To check your current branch:
git branch
The current branch will have an asterisk next to it. To switch to the right branch:
git checkout <branch-name>
Then simply push again:
git push origin <branch-name>
4. Check Remote URLs and Permissions
This error can pop up if the remote URL is incorrect or you don’t have permission to push. Run the following to verify your remote:
git remote -v
If the URL is incorrect, you can set it again using:
git remote set-url origin <url>
If it’s a permissions issue, especially with HTTPS remotes, make sure your credentials are correct. For SSH URLs, verify your SSH keys are configured properly and linked to your Git account (GitHub, GitLab, etc.).

5. Push a New Branch
Are you trying to push a newly created branch that doesn’t exist on the remote? Then, the error message might reflect that the reference (ref) doesn’t exist.
Create the branch and push explicitly:
git checkout -b new-feature
git push -u origin new-feature
The -u
flag sets upstream so that future git push
commands know which remote branch to sync with.
6. Synchronize With the Remote Using Fetch + Rebase
If you’ve made some commits and get this error because the upstream has changed, try fetching changes first:
git fetch origin
Then, instead of merging, rebase on top of the fetched branch:
git rebase origin/<branch-name>
Why choose rebase? It gives you a cleaner Git history without extra merge commits, making your commit log easier to read.
Then push normally:
git push origin <branch-name>
7. Reset Your Local Branch (Last Resort)
If you’re in a situation where you just want your local branch to exactly match the remote (like in CI/CD), you can reset it completely:
git fetch origin
git reset --hard origin/<branch-name>
This discards all local changes, so use it cautiously. Afterward, your branch will mirror the remote exactly, and you can push without errors.
Common Scenarios and Fix Summary
- You pulled with rebase, but didn’t resolve conflicts: Run
git rebase --continue
- Your history diverged due to rebase/change-overwrite: Use
git push --force-with-lease
- You haven’t fetched updates for a while:
git fetch
followed bygit rebase
orgit merge
- You lack push permission: Check access rights or remote configuration
Preventing the Error in the Future
To reduce your chances of seeing this error, consider implementing these best practices:
- Pull regularly: Keep your local branch synced with the latest changes.
- Create specific branches: Don’t work directly on
main
; use feature branches. - Communicate with your team: If you must force push, inform collaborators beforehand.
- Use descriptive commit messages: Especially when rebasing or rewriting history.
Conclusion
While the “error: failed to push some refs to” message can interrupt your flow, it’s more of a gentle nudge than a critical failure. Git is simply telling you, “Hey, something’s out of sync—let’s fix it together!”
Whether it’s a simple pull, a more advanced rebase, or verifying your permissions, solving this issue becomes straightforward once you identify the cause. Understand your workflow, communicate with your teammates, and use Git’s powerful tools responsibly—and you’ll rarely have to worry about this error again.