title: Merging changes in intermediate branches with DVCS
body: <p>I have been working with Plastic SCM for a while, but only recently discovered a flaw in my mental model of how change sets in branches work.</p>
  
  <p>Consider this simple scenario:</p>
  
  <ul>
  <li>Assume I have a branch A with a file <code>foo.txt</code></li>
  <li>I branch latest change set of A to a child branch B.</li>
  <li>I switch workspace to B and checkout <code>foo.txt</code> and make some changes, which I check in.</li>
  <li>I branch the last change set of B to C.</li>
  <li>I attempt to merge C to A</li>
  </ul>
  
  <p>In short: A branch to B, change <code>foo.txt</code> in B, branch to C, merge C to A.</p>
  
  <p>To my surprise the changes made to <code>foo.txt</code> in the B intermediate branch was ignored, because I didn't make changes to <code>foo.txt</code> in C. So after the merge from C to A, A contains the original foo.txt before branching out B.</p>
  
  <p>I would have expected my intermediate changes in B to be merged when performing a full merge from C to A, but obviously my understanding of change sets in branches have been wrong. This has caused quite some clean up from time to time when changes mysteriously were lost.</p>
  
  <p>Does Git and Mercurial or other DVCS behave similarly?</p>
  
  <p>Edit:</p>
  
  <p>Plastic version &lt;= 3 merges only changes in the source branch, not intermediate branches.</p>
  
  <p>Plastic >= 4 merges the whole branch path.</p>