Our workflow is such. We have a branch called
dev which I can reach at
origin/dev. When we do changes, we create a branch off dev:
git checkout -b FixForBug origin/dev
Now I have a branch called
FixForBug which is tracking (I think that’s the right word)
origin/dev. Thus, if I do a
git pull it’ll bring in new changes from
origin/dev which is great. Now, when I’m finished with my fix, I push to a remote branch called the same thing.
First I pull down any changes from
origin/dev and do a rebase:
git pull –rebase
Then I push the changes to a remote branch of the same name:
git push origin FixForBug
Now, there’s a branch on the remote server and I can create a pull request for that change to be approved and merged back in to the dev branch. I don’t ever push anything to
origin/dev myself. I’m guessing this is as pretty common workflow.
The first time I do a
git push, it works fine and creates the remote branch. However, if I push a second time (let’s say during code-review, someone points out a problem), I get the following error:
error: failed to push some refs to ‘https://github.limeade.info/Limeade/product.git’
hint: Updates were rejected because the tip of your current branch is behind its remote counterpart. Integrate the remote changes (e.g. hint: ‘git pull …’) before pushing again.
See the ‘Note about fast-forwards’ in ‘git push –help’ for details.
However, if I do a
git status it says I’m ahead of
origin/dev by 1 commit (which makes sense) and if I follow the hint and run
git pull, it says everything is up to date. I think this is because I’m pushing to a different branch than my upstream branch. I can fix this issue by running:
git push -f origin FixForBug
In that case, it’ll push the changes to the remote branch, saying (forced update) and everything appears to be good on the remote branch.
-f required in this scenario? Usually when you’re forcing something, it’s because you were doing something wrong or at least against standard practice. Am I ok doing this, or will it mess up something in the remote branch or create a hassle for whoever has to eventually merge my stuff into dev?
-f is actually required because of the rebase. Whenever you do a rebase you would need to do a force push because the remote branch cannot be fast-forwarded to your commit. You’d always want to make sure that you do a pull before pushing, but if you don’t like to force push to master or dev for that matter, you can create a new branch to push to and then merge or make a PR.
To make sure your local branch FixForBug is not ahead of the remote branch FixForBug pull and merge the changes before pushing.
git pull origin FixForBug git push origin FixForBug
the tip of your current branch is behind its remote counterpart means that there have been changes on the remote branch that you don’t have locally. and git tells you import new changes from
REMOTE and merge it with your code and then
push it to remote.
You can use this command to force changes to server with local repo ().
git push -f origin master
-f tag you will override
Remote Brach code with your code.
If you want to avoid having to use
-f, then you can use just
git pull --rebase
The non-rebase will fetch the changes from
origin/dev and merge them into your
FixForBug branch. Then, you will be able to run
git push origin FixForBug
The command I used with Azure DevOps when I encountered the message “updates were rejected because the tip of your current branch is behind” was/is this command:
git pull origin master
(or can start with a new folder and do a Clone) ..
This answer doesn’t address the question posed, specifically, Keif has answered this above, but it does answer the question’s title/heading text and this will be a common question for Azure DevOps users.
I noted comment: “You’d always want to make sure that you do a pull before pushing” in answer from Keif above !
I have also used Git Gui tool in addition to Git command line tool.
(I wasn’t sure how to do the equivalent of the command line command “git pull origin master” within Git Gui so I’m back to command line to do this).
A diagram that shows various git commands for various actions that you might want to undertake is this one:
This just happened to me.
- I made a pull request to our master yesterday.
- My colleague was reviewing it today and saw that it was out of sync with our master branch, so with the intention of helping me, he merged master to my branch.
- I didn’t know he did that.
- Then I merged master locally, tried to push it, but it failed. Why? Because my colleague merge with master created an extra commit I did not have locally!
Solution: Pull down my own branch so I get that extra commit. Then push it back to my remote branch.
literally what I did on my branch was:
git pull git push
It must be because of commit is ahead of your current push.
git pull origin "name of branch you want to push"
If git rebase is successful, then good. Otherwise, you have resolve all merge conflicts locally and keep it continuing until rebase with remote is successful.
git rebase --continue
This is how I solved my problem
Let’s assume the upstream branch is the one that you forked from and origin is your repo and you want to send an MR/PR to the upstream branch.
You already have let’s say about 4 commits and you are getting
Updates were rejected because the tip of your current branch is behind.
Here is what I did
First, squash all your 4 commits
git rebase -i HEAD~4
You’ll get a list of commits with
pick written on them. (opened in an editor)
pick fda59df commit 1 pick x536897 commit 2 pick c01a668 commit 3 pick c011a77 commit 4
pick fda59df commit 1 squash x536897 commit 2 squash c01a668 commit 3 squash c011a77 commit 4
After that, you can save your combined commit
You’ll need to stash your commit
git reset --soft HEAD~1 git stash
now rebase with your upstream branch
git fetch upstream beta && git rebase upstream/beta
Now pop your stashed commit
git stash pop
commit these changes and push them
git add -A git commit -m "[foo] - foobar commit" git push origin fix/#123 -f
Set current branch name like master
git pull --rebase origin master
git push origin master
Or branch name develop
git pull --rebase origin develop
git push origin develop
I had this issue when trying to push after a rebase through Visual Studio Code, my issue was solved by just copying the command from the git output window and executing it from the terminal window in Visual Studio Code.
In my case the command was something like:
git push origin NameOfMyBranch:NameOfMyBranch
Me help next:
git stash git pull origin master git apply git commit -m "some comment" git push
You must have added new files in your commits which has not been pushed. Check the file and push that file again and the try pull / push it will work. This worked for me..
If you tried all of above and the problem is still not solved then make sure that pushed branch name is unique and not exists in remotes. Error message might be misleading.