What is the meaning of git reset --hard origin/master?

I did a git pull and got an error:

The following working tree files would be overwritten by merge... Please move or remove them before you can merge.

To resolve this I did the following:

git fetch
git reset --hard origin/master

Now when I do git pull, it says everything up to date. I want to know what exactly happens when I run these commands. I know git fetch fetches the changes from the remote repo without merging them into my local repo.

What is the meaning of git reset --hard origin/master? How does it work?


Solution 1:

git reset --hard origin/master

says: throw away all my staged and unstaged changes, forget everything on my current local branch and make it exactly the same as origin/master.

You probably wanted to ask this before you ran the command. The destructive nature is hinted at by using the same words as in "hard reset".

Solution 2:

In newer version of git (2.23+) you can use:

git switch -C master origin/master

-C is same as --force-create. Related Reference Docs