1099

I can't push now, though I could do it yesterday.

When I use git push origin master, I get an error:

git remote -v 

Output:

origin https://github.com/REDACTED.git (fetch) origin https://github.com/REDACTED.git (push) 

And:

git push origin master 

Output:

Username for 'https://github.com': REDACTED Password for 'https://[email protected]': To https://github.com/REDACTED.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/REDACTED.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

My working directory and remote repository looks like:

Screenshot of Windows file folder with these directories: .git, css, js. And these files: index.php, readme, setsu.php. The word "local" with an arrow points to the css-folder. Below, screenshot with heading "github", and a css-folder and index.php-file

13
  • 21
    looks like your local repo is not in sync with the git repo. did you try to do git pull ? Commented Jun 9, 2014 at 6:25
  • 9
    Do check this similar question - stackoverflow.com/questions/18588974/… Commented Jun 9, 2014 at 6:33
  • 5
    @R11G thank you sir! this link helped me stackoverflow.com/a/18589043/3626672 Commented Jun 9, 2014 at 6:42
  • 5
    I got that error on a new repo. This helped: stackoverflow.com/a/6518774/2067690 Commented Jul 8, 2015 at 20:38
  • 22
    hey, if you find this on Google at this time, check if GitHub is down -> githubstatus.com Commented Aug 10, 2021 at 15:59

69 Answers 69

1336

(Note: starting Oct. 2020, any new repository is created with the default branch main, not master. And you can rename existing repository default branch from master to main.
The rest of this 2014 answer has been updated to use "main")

(The following assumes github.com itself is not down, as eri0o points out in the comments: see www.githubstatus.com to be sure)

If the GitHub repo has seen new commits pushed to it, while you were working locally, I would advise using:

git pull --rebase git push 

The full syntax is:

git pull --rebase origin main git push origin main 

With Git 2.6+ (Sept. 2015), after having done (once)

git config --global pull.rebase true git config --global rebase.autoStash true 

A simple git pull would be enough.
(Note: with Git 2.27 Q2 2020, a merge.autostash is also available for your regular pull, without rebase)

That way, you would replay (the --rebase part) your local commits on top of the newly updated origin/main (or origin/yourBranch: git pull origin yourBranch).

See a more complete example in the chapter 6 Pull with rebase of the Git Pocket Book.

I would recommend a:

# add and commit first # git push -u origin main # Or git 2.37 Q2 2022+ git config --global push.autoSetupRemote true git push 

That would establish a tracking relationship between your local main branch and its upstream branch.
After that, any future push for that branch can be done with a simple:

git push 

Again, with Git 2.37+ and its global option push.autoSetupRemote, a simple git push even for the first one would do the same (I.e: establishing a tracking relationship between your local main branch and its upstream branch origin/main).

See "Why do I need to explicitly push a new branch?".


Since the OP already reset and redone its commit on top of origin/main:

git reset --mixed origin/main git add . git commit -m "This is a new commit for what I originally planned to be amended" git push origin main 

There is no need to pull --rebase.

Note: git reset --mixed origin/main can also be written git reset origin/main, since the --mixed option is the default one when using git reset.

Sign up to request clarification or add additional context in comments.

15 Comments

is it OK to execute your suggested git pull --rebase...? coz I already done > git reset --mixed origin/master > git add . > git commit -m "This is a new commit for what I originally planned to be an amendmend" > git push origin master suggested here stackoverflow.com/questions/18588974/… btw your answer looks helpful sir
For me, I just needed to run "git commit". :(
Thanks, fixed a stupid issue with Git LFS, I've surrendered myself to having to use the command line from now on as a result haha.
Really super.. below commands worked for me... git reset --mixed origin/master git add . git commit -m "This is a new commit for what I originally planned to be amended" git push origin master Thank you @VonC
Turns out github had problems.
|
269

Try:

git push -f origin master 

That should solve the problem.

Based on Mehdi‘s comment, a clarification about -force pushing: The Git command above works safely only for the first commit. If there were already commits, pull requests or branches in previous, this resets all of it and set it from zero. If so, please refer to VonC‘s detailed answer for a better solution.

4 Comments

Works but bad, please don't use it unless you know what you're doing. (probably you don't know what you're doing if you're looking in S.O)
If you're going to try -f/--force it's always safer to use --force-with-lease instead, which will abort if there are downstream changes that would get clobbered by the push. --force-with-lease is required for lots of everyday rebasing situations, but --force should almost never be needed.
I don't recommend it.
this one worked for me on Nginx Producntion Environment.
165

If you just used git init and have added your files with git add . or something similar and have added your remote branch it might be that you just haven't committed (git commit -m 'commit message') anything locally to push to the remote... I just had this error and that was my issue.

3 Comments

just ran into this. Commit command didn't work during the git add. good call. Thanks
Thanks man! That's it. I thought I committed my changes. Now git push -u origin master works fine.
On my case, the commit failed because I haven't added my credentials yet on a fresh install. Running the commit command again after adding my credentials fixed my issue
81

I had the same problem. I was getting this problem because I had not made any commits, not even an initial commit and still I was trying to push.

Once I did git commit -m "your msg", everything worked fine.

10 Comments

That doesn't make much sense. The original question is about the local git being behind. In no way "being behind" can be resolved my making a local commit!
Oh I also forget to commit :p
This is also possible it won't allow you to push with an empty commit
I just had this problem and I forgot to commit. Error message should be more clear
It does apply to me since I was getting that exact error message and this solution fixed my problem.
|
71

It has worked for me with this combination of several command lines:

git reset git remote -v git pull --rebase git init git add -A git commit -m "Add your commit" git branch -M main git push origin main --force 

Be careful. If they have a Readme file, the git reset deletes them.

3 Comments

This sounds like dangerous advice. All implications and caveats ought to be explained in the answer.
An explanation would be in order. E.g., what is the idea/gist? What is it supposed to do? What are all the risks? From the Help Center: "...always explain why the solution you're presenting is appropriate and how it works". Please respond by editing (changing) your answer, not here in comments (without "Edit:", "Update:", or similar - the answer should appear as if it was written today).
thi s was the right one
52

Rename your branch and then push, e.g.:

git branch -m new-name git push -u new-name 

This worked for me.

3 Comments

Wow, this actually worked, but why? I had a hyphen in my local branch name: my-branch_wont_push. Once I renamed it to my_branch_wont_push, then git push -u origin my_branch_wont_push worked for me.
Thanks. As @cdabel mentioned, the hyphen was the culprit. Changed it to underscore and my push went through.
I simply renamed my branch to something else (which contained a hyphen) and it also worked. Don't know why though.
40
  1. git init

  2. git remote add origin https://gitlab.com/crew-chief-systems/bot

  3. git remote -v (for checking current repository)

  4. git add -A(add all files)

  5. git commit -m 'Added my project'

  6. git pull --rebase origin master

  7. git push origin master

5 Comments

before pushing the code you need to pull from repository
you can simply write like git pull --rebase origin master
This worked for me, had a refs issue, which this fixed.
error: cannot spawn sh: No such file or directory fatal: unable to fork
git pull --rebase origin master solved my issue. Thanks a lot dear.
23

I found the solution to this problem in GitHub help (Dealing with non-fast-forward errors):

You can fix this by fetching and merging the changes made on the remote branch with the changes that you have made locally:

$ git fetch origin # Fetches updates made to an online repository $ git merge origin branch # Merges updates made online with your local work 

Or, you can simply use git pull to perform both commands at once:

$ git pull origin branch # Grabs online updates and merges them with your local work 

1 Comment

This is the normal process whenever things are working as expected. It doesn't help anything when git thinks it is already up to date as @rubyandcoffee asked.
22

I followed the following steps, and it worked for me.

rm -rf .git git init git add . git commit -m"The first message" git remote add origin "LINK" git push -u origin master 

1 Comment

This is the final solution for beginners
17

If you were using git push origin master, change it to git push origin main and vice versa.

2 Comments

Presuming GitHub'ish?
17

I got into this error today. The problem was that GitHub had an outage, and I could not push any changes, so before you start to mess up with the config, maybe check https://www.githubstatus.com.

remote: Resolving deltas: 100% (5/5), completed with 4 local objects. remote: fatal error in commit_refs To github.com:REDACTED.git ! [remote rejected] main -> main (failure) error: failed to push some refs to 'github.com:REDACTED.git' 

Comments

17

I had faced the same problem and fixed it with the below steps.

  1. git init

  2. git add .

  3. git commit -m 'Add your commit message'

  4. git remote add origin https://[email protected]/User_name/sample.git

    (The above URL, https://[email protected]/User_name/sample.git, refers to your Bitbucket project URL)

  5. git push -u origin master

Hint

Check if your GitHub account links with your local Git repository by using:

git config --global user.email "[email protected]" git config --global user.name "Your Name" 

Comments

11

I got this error because I tried to push without committing So tried

git add .

git commit -m "message"

git push -f

Then it worked well for me

1 Comment

this answer is similar to this answer, this answer, and this answer
9

Remember to commit your changes before pushing to the GitHub repository. This might fix your problem.

1 Comment

this answer is expanded upon in this answer, this answer, and this answer (all later than this one was posted. moral of story: examples are valuable)
9

I created an empty repository in GitHub and have my code locally. I faced the same issue now, as I followed the below sequence,

git init git commit -m 'Initial Commit' git remote add origin https://github.com/kavinraju/Repo-Name.git git add . git push -u origin master 

The issue was: I tried to commit before staging the files I have.

So we need to stage the files and then commit.

This is the correct sequence.

git init git add . git commit -m 'Initial Commit' git remote add origin https://github.com/kavinraju/Repo-Name.git git push -u origin master 

Since I executed the wrong sequence first, I just executed the below commands:

git add . git commit -m 'Initial Commit' git push -u origin master 

Comments

9

Because maybe it has nothing to push (really, nothing to push). Do it like this:

git remote add origin https://github.com/donhuvy/accounting133.git git remote -v git add . git commit -m"upload" git push --set-upstream origin master 

Change the remote repository's URL in your case. You can skip command git remote -v, just for checking.

Comments

8

If you are using Gerrit, this could be caused by an inappropriate Change-id in the commit. Try deleting the Change-Id and see what happens.

Comments

6

GitHub changed the default branch name from master to main. So if you created the repo recently, try pushing the main branch.

git push origin main 

This is a common mistake beginners can make.

GitHub article Renaming the default branch from master.

Comments

5

Use:

git push origin {your_local_branch}:{your_remote_branch} 

If your local branch and remote branch share the same name, then can you omit your local branch name. Just use git push {your_remote_branch}. Otherwise it will throw this error.

Comments

5

Try this Git command,

git push origin master –f git push origin master --force 

2 Comments

error: cannot spawn sh: No such file or directory fatal: unable to fork
"–" in "–f" is an em dash, not ASCII 45 ("-"). I don't think it will work.
5

Using a Git repository in Azure DevOps, the problem was a branch policy requiring that all changes to the branch must be made via a pull request (PR). Trying to push changes directly to the branch generated the error "failed to push some refs to ...".

I created a PR branch and pushed without problem.

Comments

5

Just run these two commands if you are deploying your site on GitHub pages for the first time.

git commit -m "initial commit" git push origin +HEAD 

Comments

4

Before push, you have to add and commit the changes or do git push -f origin master.

Comments

4

The fact that GitHub changed master to main made me encounter this issue. So from now on, the solution to push to origin is:

git push -u origin main 

1 Comment

Do you means the remote repo on GitHub has only a branch main, not master? I have created a brand new repo on GitHub, and its main branch remains... master (for now)
4

In my case there was a problem with a Git pre-push hook.

Run git push --verbose to see if there are any errors.

Double check your Git hooks in the directory .git/hooks or move them temporarily to another place and see if everything works after that.

Comments

4

Due to the recent "replacing master with main in GitHub" action, you may notice that there is a refs/heads/main if you do git show-ref. As a result, the following command may change from

git push heroku master

to

git push heroku main

That will solve your issue.

Comments

4

In my case, these two lines solved the problem.

git add . git commit -m "Changes" 

Actually, I forgot to add and commit to my changes and was just trying to push it for the first time.

git init git remote add origin https://github.com/anything/repo-name.git git add . git commit -m "Changes" git branch -M main git push -u origin main 

Comments

3

These steps worked for me:

  1. Switch to current branch & pull latest code

  2. Rename local branch

    git branch -m [new-name]

  3. Push local branch to server

    git push origin [new-name]

  4. Remove branch from server

    git push origin --delete [old-name]

1 Comment

Why did you need to rename a local branch?
3

In my case, the branch name prefix was already present at remote, so basically if you have a branch name 'fix' you cannot push another branch with name 'fix/new_branch_name'.

Renaming the branch solved my problem.

Comments

3

if you are using powershell i will recommend use git bash it is available in vs code

  1. switch to git bash
  2. check ls -a (it will show hidden file)
  3. if you find .git file remove using rm -rf .git
  4. then git init
  5. git add .
  6. git commit -m "message"
  7. git remote add origin "https://.............."
  8. git branch -M main
  9. git push -u origin main

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.