Question: I'm about to use git to help me with my new project, but I don't know how to design it.

Let's say I have a master coding, and I decide to have 2 separated UI based on master coding so I create 2 brand new branches.

1. What do I do, If finally I would like to end up with 2 production versions?, most examples teach to merge each to master and delete the branch after the merge, but I want to end up with 2 production versions.
2. If I changed some coding in the master while develop those 2 branches, the 2 branches will notice the changes automatically? or I have to do anything in git?

Thanks.

Answer: 
There's nothing special about the name "master". You can have your two UI branches and a "master" branch where the UI ones are what you'd call production versions . If you want to get the changes from master you'd just make your changes there and then change to a UI branch and do a merge of master into that UI branch. 

```
git checkout UI1
git merge master
git checkout UI2
git merge master

```

Regarding question 2, they won't automatically notice and update. You need to do that yourself. This is actually a feature so that your "production" branches don't break every time someone introduces a not-sufficiently-tested change the the branch that feeds into production.
```
git checkout -b core; //Shared code
git checkout -b projectFoo;
git checkout -b projectBar;

git checkout core;
// core like a boss....
git add .;
git commit -am 'shared commit';

git checkout projectFoo;
git rebase core;

git checkout projectBar;
git rebase core;

```