title: Updates were rejected because the tip of your current branch is behind its remote counterpart
body: <p>Our workflow is such.  We have a branch called <code>dev</code> which I can reach at <code>origin/dev</code>.  When we do changes, we create a branch off dev:</p>
  <pre><code>git checkout -b FixForBug origin/dev
  </code></pre>
  <p>Now I have a branch called <code>FixForBug</code> which is tracking (I think that's the right word) <code>origin/dev</code>.  Thus, if I do a <code>git pull</code> it'll bring in new changes from <code>origin/dev</code> which is great.  Now, when I'm finished with my fix, I push to a remote branch called the same thing.</p>
  <p>First I pull down any changes from <code>origin/dev</code> and do a rebase:</p>
  <pre><code>git pull --rebase
  </code></pre>
  <p>Then I push the changes to a remote branch of the same name:</p>
  <pre><code>git push origin FixForBug
  </code></pre>
  <p>Now, there's a branch on the remote server and I can create a pull request for that change to be approved and merged back in to the dev branch.  I don't <em>ever</em> push anything to <code>origin/dev</code> myself.  I'm guessing this is as pretty common workflow.</p>
  <p>The first time I do a <code>git push</code>, it works fine and creates the remote branch.  However, if I push a <em>second</em> time (let's say during code-review, someone points out a problem), I get the following error:</p>
  <blockquote>
  <p>error: failed to push some refs to
  'https://github.mydomain.info/Product/product.git'<br />
  hint: Updates were rejected because the tip of your current branch is behind its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again.<br />
  See the 'Note about fast-forwards' in 'git push --help' for details.</p>
  </blockquote>
  <p>However, if I do a <code>git status</code> it says I'm ahead of <code>origin/dev</code> by 1 commit (which makes sense) and if I follow the hint and run <code>git pull</code>, it says everything is up to date.  I <em>think</em> this is because I'm pushing to a different branch than my upstream branch.  I can fix this issue by running:</p>
  <p><code>git push -f origin FixForBug</code></p>
  <p>In that case, it'll push the changes to the remote branch, saying <em>(forced update)</em> and everything <em>appears</em> to be good on the remote branch.</p>
  <p><strong>My Questions:</strong></p>
  <p>Why is <code>-f</code> required in this scenario?  Usually when you're <em>forcing</em> something, it's because you were doing something wrong or at least against standard practice.  Am I ok doing this, or will it mess up something in the remote branch or create a hassle for whoever has to eventually merge my stuff into dev?</p>