During my software testing years I realized one important fact. Many software developers and testers claim that they know how to use a number of version control tools: git, SourceSafe, mercurial, cvs, svn, … You name it and they know how to use it.

But still, those professionals produce a lot of project problems by miss using those tools. And by that I do not only mean famous version control anti pattern: delete-copy-paste-my-local-project-to-version-control-repository.  Many professionals do not understand basics of any version control system. Basics that enables them to use version control system on a piece of a paper or in their mind.  When you hire software professional, do not put under job requirements list of version control tools. Simple statement: “You will need to explain in your words version control fundamental concepts” is enough. We will teach you how to map those concepts to version control tool command lines that we are using in our project.

Yes, I said command lines. Not GUI for that tools. Because, mapping from version control concepts to version control tool is only effective by using command line tools.

So what are version control concepts? You need to understand and be able to explain in your own words following concepts.


  • repository
  • branch
  • remote
  • local
  • pull
  • push
  • merge
  • difference
  • commit

Think about those concepts on some practical problem. For example, how would you version control simple document, for example your CV, in your mind. And divide that document in several text files, each section of your CV as one text file. When you will be able to explain basic version control concepts by your own words using that simple example, than you will be able to map those concepts on any version control system currently available.