Force pushing in git is a subject that attracts all kinds of religious
battles. This post is not about the merits of force pushing.
This post is about how to use git push -f if and when you do use it.
Never call git push -f without additional arguments.
Let’s say you’re working on a branch, ‘foobar’, and you decide to force
push to the remote. So you do this:
git push -f
If anyone has committed anything to master since you last
pulled — and if you’ve been working on the branch for any length of time
this is pretty likely — you will blow their changes away, because
without arguments git will force push all remote-tracking branches.
So, if you ever need to force push the ‘foobar’ branch, please instead
do
git push -f origin foobar
You can also change git’s default behaviour of pushing all tracked
branches by doing git config --global push.default upstream, but I’d
suggest you just get into the habit of typing out your intentions in
full when doing a destructive operation like force pushing, otherwise
disaster will strike when you use someone else’s differently-configured
git, or miss a step when configuring a new machine.