What you probably didn't find out from your discussion is that as soon as you've cloned you already have your own completely custom branch . By default that custom local branch is called "master", not to be confused with "origin/master" (which is by default the remote branch which your local master branch points to, but you can change that if you want with git reset). With git checkout -b X Y (shortcut to git branch X Y + git checkout X) you make additional local branches, but you don't really need that unless you want to be able switch between that and master quickly. For example if you create two databases, one for 303 and one for 242, you make two branches named A and B, one pointing to origin/master and one to origin/mangos-0.12, you add and commit the configuration files (with the matching database specified), you can switch between the two setups with a simple "git checkout A" or "git checkout B". That stuff is only made complicated by the database stuff, and it's the same for switching to older version. When database changes are not involved multiple branches become more useful. For example you could switch between a branch which contains only "vanilla" mangos and one which has your local changes, or you could have one branch which contains patches X,Y and one which contains Z,T. So if at any time you say "oops that patch totally messed something up", you just git checkout <the-previous-local-branch-that-worked>. You could also achieve similar things with revert. You apply a patch, commit it, and then you can pass that SHA of that commit to git revert to record another commit which reverts it. Maybe you have a branch which contains patches X,Y,Z but none with just Y,Z. Instead of removing all patches and applying Y,Z again you can just run revert on the commit where you added X.