git push -f
takes your local copy, and forces it to the remote, NO MATTER WHAT. The remote becomes an exact copy of your local branch. What this means is that everything on the remote branch and not on your local branch, will be erased; there is no undoing this. The -f
flag should never be used unless you are purposefully re-writing history.
It is not possible to "delete" commits. You can only write over them using a '-f' which re-writes history. Therefore, if something is gone due to a -f
it will never come back. It is lost forever. In other words, there is no way to see the history in github because your history has been re-written.
From the spec
-f
--force
Usually, the command refuses to update a remote ref that is not an ancestor
of the local ref used to overwrite it. Also, when
--force-with-lease
option is used, the command refuses to update a remote ref whose
current value does not match what is expected.
This flag disables these checks, and can cause the remote repository
to lose commits; use it with care.
Note that --force
applies to all the refs that are pushed,
hence using it with push.default set to matching or with multiple push
destinations configured with remote.*.push
may overwrite refs other
than the current branch (including local refs that are strictly behind
their remote counterpart). To force a push to only one branch, use a +
in front of the refspec to push (e.g git push origin +master to force
a push to the master branch). See the <refspec>...
section for
details.