gitpushgit-pushgit-non-bare-repository

How do I properly force a Git push?


I've set up a remote non-bare "main" repo and cloned it to my computer. I made some local changes, updated my local repository, and pushed the changes back to my remote repo. Things were fine up to that point.

Now, I had to change something in the remote repo. Then I changed something in my local repo. I realized that the change to the remote repo was not needed. So I tried to git push from my local repo to my remote repo, but I got an error like:

To prevent you from losing history, non-fast-forward updates were rejected Merge the remote changes before pushing again. See the 'Note about fast-forwards' section of git push --help for details.

I thought that probably a

git push --force

would force my local copy to push changes to the remote one and make it the same. It does force the update, but when I go back to the remote repo and make a commit, I notice that the files contain outdated changes (ones that the main remote repo previously had).

As I mentioned in the comments to one of the answers:

[I] tried forcing, but when going back to master server to save the changes, i get outdated staging. Thus, when i commit the repositories are not the same. And when i try to use git push again, i get the same error.

How can I fix this issue?


Solution

  • Just do:

    git push origin <your_branch_name> --force
    

    or if you have a specific repo:

    git push https://git.... --force
    

    This will delete your previous commit(s) and push your current one.

    It may not be proper, but if anyone stumbles upon this page, thought they might want a simple solution...

    Short flag

    Also note that -f is short for --force, so

    git push origin <your_branch_name> -f
    

    will also work.