Reputation: 177
I am trying to push my application with Source Tree.
I reverted the application (locally) to an old version, made some changes and now I want to push again, but I'm getting this error:
git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin dev:dev
Pushing to https://[email protected]/hykaruz/assist-ponto.git
To https://[email protected]/hykaruz/project.git
! [rejected] dev -> dev (non-fast-forward)
error: failed to push some refs to 'https:/User:bitbucket.org/hykaruz/Project.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.
PS. My version was too old, I had to download the last version then I can commit and push my application, so if you get the same problem check to see if there's an update.
Upvotes: 2
Views: 7142
Reputation: 1862
In my case for exact same error, I was not the only developer.
So I went to commit & push my changes at same time, seen at bottom of the Commit
dialog popup:
...but I made the huge mistake of forgetting to hit the Fetch
button to see if I have latest, which I did not.
The commit successfully executed, however not the push, but instead gives the same mentioned error; ...even though other developers didn't alter same files as me, I cannot pull latest as same error is presented.
Most of the time I prefer sticking with Sourcetree's GUI (Graphical User Interface). This solution might not be ideal, however this is what got things going again for me without worrying that I may lose my changes or compromise more recent updates from other developers.
Right-click on the commit right before yours to undo your locally committed changes and select Reset current branch to this commit
like so:
Once all the loading spinners disappear and Sourcetree is done loading the previous commit, at the top-left of window, click on Pull
button...
...then a dialog popup will appear, and click the OK
button at bottom-right:
After pulling latest, if you do not get any errors, skip to STEP 4 (next step below). Otherwise if you discover any merge conflicts at this point, like I did with my Web.config
file:
...then click on the Stash
button at the top, a dialog popup will appear and you will need to write a Descriptive-name-of-your-changes, then click the OK
button:
...once Sourcetree is done stashing your altered file(s), repeat actions in STEP 2 (previous step above), and then your local files will have latest changes. Now your changes can be reapplied by opening your STASHES
seen at bottom of Sourcetree left column, use the arrow to expand your stashes, then right-click to choose Apply Stash 'Descriptive-name-of-your-changes'
, and after select OK
button in dialog popup that appears:
IF you have any Merge Conflict(s) right now, go to your preferred text-editor, like Visual Studio Code, and in the affected files select the Accept Incoming Change
link, then save:
Then back to Sourcetree, click on the Commit
button at top:
then right-click on the conflicted file(s), and under Resolve Conflicts
select the Mark Resolved
option:
Finally!!! We are now able to commit our file(s), also checkmark the Push changes immediately to origin
option before clicking the Commit
button:
P.S. while writing this, a commit was submitted by another developer right before I got to commit, so had to pretty much repeat steps.
Upvotes: 1
Reputation: 109
Because your commit history diverges from the upstream repository (you didn't just add more commits), git refuses to push the changes because you can lose work this way.
If you are sure you want to overwrite the upstream repository history with your own (e.g., you are the only one pushing to that repository), you have to add -f
to force the push.
Upvotes: 2