title: Maintaining multiple branches of the same base project in VS
body: <p>I've looked around the site but I couldn't find an answer that covers mine entirely, so please excuse me in advance if I missed it.</p>
  
  <p>I inherited a VB.NET project that didn't have source control (it started as a pet project of a long-gone dev and nobody ever bothered after that to put it in), and by a friend's suggestion I thought about using Git for source control.</p>
  
  <p>The project is a niche product that is customized and sold according to the customer's specs, so that brings the problem that even if 95% of the code is the same for all the customers, sometimes up to 10% of the code is changed and tailored for each customer, by changing or adding lines to existing functions, sometimes adding whole blocks of code, but there's no commonality in the changes between different customers (a function changed in one might not be changed in another).</p>
  
  <p>To complicate things further, due to maintenance contracts, updates made to the baseline app have to be replicated in the customer's branches should they want them, and sometimes changes we make for a specific customer are good enough that we want to put them in the baseline app and replicate them to the other customers, BUT keeping the customizations for each customer!</p>
  
  <p>So with my little knowledge of Git, I thought it would be like:</p>
  
  <pre><code>          (customer 1)
           C1-----
  (main)  /
  A------B------D
          \
           \ (customer 2)
           C2-----
          \
           \ (customer 3)      
           C3-----
  </code></pre>
  
  <p>...but I can't see how it's going to work after that:</p>
  
  <ul>
  <li>Can I merge SOME changes from the customer's branches into the main trunk WITHOUT merging others that are only useful for that customer? </li>
  <li>Can I merge SOME changes from the main trunk into each customer's branches WITHOUT losing the customizations in those branches?</li>
  <li>Can I "mark" specific lines of code so they are not merged/committed?</li>
  <li>Three or more devs will be working in this, each in his own machine but pushing changes to the company's repository for synchronization. What are the implications for this process?</li>
  <li>Right now, <strong><em>every customer has a separate folder and separate project files with all their source code.</em></strong> How would be the import process to put those folders them into Git?</li>
  <li>All of this must be done with Visual Studio, with Gitextensions and the Git Source provider for VS. Is it supported, or it has to be done with the console?</li>
  </ul>
  
  <p>Thanks and sorry again if it overlaps with another answer.</p>