A force press simply tells the remote device to move the given mark (s), even if moving is not a fast forward operation. 1 Fast-forward (optional) results in “abandoned” commits: commits that are no longer available from some link.
(This does not happen when the movement of the label occurs on the part of the graph that is referenced elsewhere. For example, if the xyzzy branch indicates a D fixation in the sequence:
ABCE <-- plugh \ / D <-- xyzzy
then it doesn't matter what happens with the plugh label, since the plugh label makes commit D available. Thus, moving xyzzy using non-transition mode, for example to commit C , does not affect commit D . Similarly, deleting an xyzzy label is also completely harmless, at least in terms of the structure of the fixation schedule.)
Remote bare repositories (which are usually pushed to) often do not register all ref updates, so this leads to a quick garbage collection of any abandoned commits. (Note that if you store them in your own repository, you can restore gc'ed commits later, but this requires that you send the data over the network again and put you at risk of data loss if your own repo is corrupted through, say, power failure or computer on fire.)
If you have third-party software that assumes that (some or all) the branch labels move only in fast forward mode, the specified software may fail in interesting ways. I don’t know such software, and if it exists, I would call it “broken”, but people often seem to write broken code and then depend on it.
1 Older versions of git allowed tags to move without forcing if the move was fast, just as branch labels are expected to move. Newer versions (I think they were introduced in 1.8.2, but only from memory) reject any tag movement unless you use force. Of course, you can always delete and then recreate (possibly in another place) the shortcut, and the hook built into it is fine. Thus, there are other ways to move a tag or branch in an arbitrary way, even without power. Just make sure that the parts of the commit graph that you want to keep have some label in each operation.
As for making (your own) more complex process later: yes, it can have such an effect, because you can force the desktop to be forced and thus rearrange the shared-bare-repo. Later, on the “laptop”, you may not be able to remember what you are convinced, and figuring this out can be a little complicated, especially in a large, highly active repository.
Fortunately, there is a new feature in the new git release that uses your logs to find out if an upstream rebase has occurred and when. That is, in the above situation, you could (on a "laptop") ask git to automatically detect which commits were reinstalled in shared-bare-repo and "reinstall" your laptop on this. (This is a generalization of the method used with git pull --rebase today, in git 1.8.x.)