&gt; Call it a reflex.<p>PTSD? :) Use local topic branches for everything to avoid unpleasant surprise merges. Once you are ready to merge, pull the shared branch, merge&#x2F;rebase onto that and push&#x2F;submit&#x2F;whatever.<p>I sometimes keep separate branch for each thing that I intend to become a <i>master</i> commit. This way I can use as many small and ugly commits and swearwords as I please and later squash them for publication after all bugs are ironed out.<p>This helps with remembering why particular commits look the way they do, especially in high latency code review environments where it can take days or weeks and several revisions to get something accepted.<p>&gt; Git&#x27;s problem was precisely &quot;oh, we can&#x27;t push to that repository because we might have to mess with the working copy without Bob&#x27;s knowledge,&quot; and it&#x27;s a totally unnecessary problem.<p>Actually Bob&#x27;s working copy isn&#x27;t modified, it&#x27;s just that if his branch was allowed to suddenly stop matching his working copy, he would probably have some fun committing (not sure what exactly, never tried).