title: What does git fetch exactly do?
body: <p>Edit: I have checked this <a href="https://stackoverflow.com/questions/9237348/what-does-fetch-head-in-git-mean">What does FETCH_HEAD in Git mean?</a>    before asking the question.<br>
  Sorry for the original inaccurate question. </p>
  
  <p>My question is how does fetch really work?  Does fetch drop all current log?</p>
  
  <p>This is my situation: my teammates and I are using the same repository which only has one branch. So we have to do fetch before push anything up.<br>
  We typically do it this way:</p>
  
  <pre><code>git status
  git add .
  git commit -m message1
  git fetch origin
  git reset head
  git status
  git add .
  git commit -m message
  git push
  </code></pre>
  
  <p>But after reset, it seems that my previous commit (with <code>message1</code>) is gone.</p>
  
  <p>Is this normal or is there anything wrong?<br>
  How can I access my local history?<br>
  They are synced but my local history is gone.</p>
  
  <p>Old staff ,forget it: I have been learning  Git CLI recently.<br>
  Someone told me to type "<code>git fetch head</code>" to keep track of remote branch.<br>
  But I wonder what does this do ? Does this command override my local log?<br>
  And what is the difference between "<code>git fetch</code>" and "<code>git fetch head</code>" ?</p>