title: What's the difference between git rebase and merge --no-ff
body: <p>Both approach seem to have the same purpose to have clean history:</p>
  
  <ul>
  <li><p><a href="http://git-scm.com/book/en/Git-Branching-Rebasing" rel="noreferrer">Git Rebase</a></p></li>
  <li><p><a href="http://nvie.com/posts/a-successful-git-branching-model/" rel="noreferrer">No fast forward</a> (<code>--no-ff</code>)</p></li>
  </ul>
  
  <p>So, if I have done rebasing on a feature branch, do I still need <code>--no-ff</code> when merging back to the main branch?</p>
  
  <p>UPDATE:</p>
  
  <p>It seems to me there is a confusion between rebasing, fast forward and non fast forward merging, basically diagram (fig 3.28) in this link <a href="http://git-scm.com/book/en/Git-Branching-Rebasing" rel="noreferrer">http://git-scm.com/book/en/Git-Branching-Rebasing</a>  shows normal merge result is the same as merge --no-ff from the top answer of this link <a href="https://stackoverflow.com/questions/2850369/why-does-git-use-fast-forward-merging-by-default">Why does git fast-forward merges by default?</a></p>