The what, why and who of this website.
For newcomers, both Git and GitHub can be overwhelming. With unusual terminology: branches, pull requests, forks, and merges, it often appears tailored for seasoned developers. However, in today’s collaborative software development landscape, proficiency with GitHub is not just advantageous—it is becoming essential.
Whether you’re just beginning to learn programming, launching your first open-source project, or simply looking to manage version control more effectively, a solid understanding of Git and GitHub can significantly enhance your workflow.
There are many tutorials and lots of documentation for Git and GitHub, but these tend to dive straight into complex concepts without sufficient context.
This is where project-based learning for GitHub proves invaluable. And that is the purpose of this site: Mastering GitHub.
Many beginners face the same issue: GitHub isn’t intuitive. It assumes you already understand concepts like repositories, branches, and staging areas. For someone just getting started, that’s a lot to deal with.
Some common struggles include:
Not knowing where to begin
Confusion between Git and GitHub
Difficulty setting up local environments and systems
Fear of breaking something
Instead of theory-heavy manuals, what beginners really need is a hands-on guide — something that walks through realistic projects, explains things in plain language, and builds confidence step by step.
With Project-based learning for GitHub you learn by doing. This method is especially effective for mastering how GitHub works in practice, and understanding workflow and process.
With project-based tutorials like those in Mastering GitHub, you’ll:
Start with real-world tasks (like creating a repository)
See how each Git command fits into an actual use case
Build muscle memory through repetition
Understand concepts by watching them play out in action
For example, instead of reading a page about “pull requests”, you'll create one as part of a mini project—learning the what and the why in context.
Mastering GitHub is a comprehensive, easy-to-follow resource that’s perfect for beginners. It uses Visual Studio Code as the main interface, meaning you’ll be working in a real development environment from day one.
Here’s what’s covered:
From cloning your first repository to managing collaborative branches, you’ll learn every step of the Git and GitHub process in the right order.
You’ll learn how to:
Connect VS Code to GitHub
Track changes with the built-in Git panel and extensions
Build muscle memory through repetition
Push and pull code without using the terminal (unless you want to)
This makes it much easier for visual learners or those new to the command line.
Topics like branching, merging, and conflict resolution can be overwhelming. But with real scenarios and clear explanations, you'll understand how teams actually work together within a project.
You’ll get hands-on experience with:
GitHub Wikis for project documentation
GitHub Pages for publishing websites straight from your repo
Whether you're building a personal portfolio or contributing to open-source projects, you'll see how powerful these tools can be.
Already know the basics? No problem. The guide includes:
Git command cheat sheets
Shortcut keys
Tips for working faster with GitHub and VS Code
This makes it just as useful as a reference as it is for first-time learners.
Let’s face it—most beginner tutorials are either too shallow or too complex. They focus on what GitHub is, not how to use it.
Mastering GitHub solves this by:
Making the learning process applicable and practical
Breaking down intimidating tasks into small, manageable chunks
Letting you work at your own pace with no pressure or signup
You will finally understand:
The difference between Git and GitHub
How version control fits into real projects
Why developers swear by Git and GitHub (and why they swear at them)
And because it’s all project-based learning, you’ll walk away with tangible experiences and examples, not just theory.
If you’re:
A student or self-taught coder learning how to manage code
A designer or writer collaborating on technical projects
An experienced user that wants to know the finer points
A non-developer who wants to understand version control
Or just curious about open source…
Then this guide is built for you.
No jargon, no fluff—just real skills you can use.
I am by profession an engineer, I build and programme control systems for a living (industrial machinery, pharmaceutical manufacturing, even tritium handling systems for nuclear reactors). The software that goes in these systems is (usually) rigorously tested and anything that goes into a regulated environment (pharmaceutical, nuclear, safety systems etc.) has quite stringent version control and traceability requirements.
Version control is important, particularly when the reactor melts-down and you want to know who to blame †1 . It’s also important when you’ve completely messed things up and you need to back to an earlier, less messed-up version.
Now I write industrial software and these applications usually have their own development environments and version tracking mechanisms that are particular to the product being used (Siemens, ABB etc.). Other things such as documents and drawings are controlled by the in-house version control system that we operate in the office.
At some point I started my own website, The Practical Series of Publications, which I originally intended to contain some obscure engineering texts in the form of a web-based book that might have been useful to other engineers.
When I started the Practical Series website, I wanted some form of version control. It was just me working on it, so I didn’t need anything too ambitious—and in the early days I just kept increasing the revision number and backing up everything each time I did so.
This was fine, up to a point. Websites are not particularly massive things, a few megabytes; and having multiple copies doesn’t tax a modern hard drive particularly.
So, what was the problem?
Well the main problem was that I wasn’t documenting the revisions properly; the website has a lot of files (way over a thousand) and while I had a copy of every file at every revision, I didn’t necessarily know which files had changed from one revision to another.
It was also a very inefficient mechanism; there were probably some files in there (images for example) that were in at the first revision and were backed up without change in every subsequent revision up to the latest (there were over 150 revisions when I stopped).
It became more complicated when I wanted to work on two different things at once; I might for example be correcting typos in one section that had just been proofread, while developing a new section from scratch. It was difficult to keep track of each.
So while what I had worked, sort of — I could always go back to an earlier version. It was laborious; I would have to guess which revision I wanted, unzip it and then look at the file I wanted to see if it was the right version, if it wasn’t I had to guess another revision and do the same until I found the one I was looking for. This was OK in the early days; but at the point where I switched over to proper version control, I had 78,000 files in 35,000 folders and 150 zipped revisions. The whole thing was taking up 7 GB most of which was identical copies of files that hadn’t changed between revisions.
It was at this point that I decided I needed some proper version control and while I could have used the office system, that didn’t feel right. My website was nothing to do with my work (more an expensive hobby really) and I didn’t want to take advantage. Neither did I want to buy the office version for home use, it was just two expensive and way over the top for what I needed.
So I had a look around. There are lots of different version control systems out there; some are free, some are commercial applications. The question is: which one to use?
One thing that gave me a clue was the software I had used in developing the website. I had used various open-source software files (some CSS files, some Java Script code etc.) that improved or added functionality to the website (things like lightbox images and formulae on web pages). I noticed as I researched these things, that virtually all of the people developing these applications used GitHub as their version control system.
So I decided to have a look at GitHub and I realised that this was the online version of Git, Git being a local version control system that runs on a PC or Mac.
I had a couple of goes at it and gave up each time — Git and GitHub have a pretty steep learning curve, especially Git (the application that runs on a local machine rather than GitHub that is web based). Git is driven through a command line terminal emulator (just like MS-DOS†2 and those text adventures from the eighties) and is virtually impossible to use without having a reference book open.
My conclusion was that both Git and GitHub are complicated and very difficult to understand.
In the end I came to terms with them both, then I found Visual Studio Code (a text editor developed by Microsoft and use by pretty much everybody) that provided a decent front end and interface to both Git and GitHub. It allowed a proper windows-based (GUI†3) approach to be taken with both applications and it was much more intuitive.
Git and GitHub, apart from having peculiar (and slightly rude sounding names†4), also have a wide range of in-house terminology and phrases — things like:
Push
Pull
Repo
Fork
Branch
Checkout
Rebase
Tag
Release
Gist
Flirt
Ok, I made the last one up, but you wouldn’t necessarily know.
It is all very confusing and not that well explained.
It takes a long time to get to grips with Git and GitHub — to such an extent that I had to make lots of notes, do a lot of reading around the subject, try a lot of different things and experiment with them until I had an understanding of what it all meant and how it worked.
And since I had written it all down, I thought it might be useful to other people — so I decided to publish it as a website, and here it is, dear reader, use it wisely.
Well, philanthropy I suppose†5, but also because I was slightly annoyed by the whole Git and GitHub thing.
Git and GitHub are designed by geeks for geeks — and it certainly shows. They belong to a bit of a club where those in the club don’t really want to explain it to those outside; they say they do (because it’s open-source, liberal and trendy), but they don’t, not really.
They overcomplicate things, they use opaque terminology and jargon (engineers are not entirely blameless in this department either), it’s all designed to be a bit intimidating and to make you feel — well — stupid. It reminds me very much of the gramophone sketch by the Not the nine o’clock news team. It’s the same attitude.
I also noticed that there are a fair few people that make a profit out of teaching people how to use this stuff and in my book, that’s not right. Git says it is a “free and open-source distributed version control system” It also says “Git is easy to learn” and that has definitely not been my experience. It should be easy and it should be free.
So I decided to do something about it.
I’ve written this website and published it in the hope that some people will find it useful and that I’ve explain things a bit better than Git and GitHub do.
I’ve even provided a searchable pdf version of the whole thing that can be downloaded here.
The reason it is free is because both Git and GitHub are free platforms that allows developers of open-source projects to easily share their code and collaborate with others.
It is in that spirit that I have created this website.
The website is entirely free and is available for you to use. There is no advertising, no registration or enrolment, I don’t ask for email addresses or credit card details.
Yes, I’ve spent considerable time writing, developing and publishing it. Yes, I’m not making any money out of it. But I’ve enjoyed the whole process, and I don’t really need the money (turns out engineering can be quite lucrative, especially now that no one studies it or wants to do it any more, at least in England), and I like the thought of other people using this stuff and putting it to work — and if that upsets and undercuts some people who are trying to charge for what should be free — well, I won’t be losing much sleep over it.
So, if you don’t want a bag on your head, read on and Get started
Michael Gledhill
June 2025 — Chester
Footnotes | |||
---|---|---|---|
†1 | I worked for one company that shall be nameless (let’s just call them “MonoBar”); they operated a blame-free culture intended to prevent accidents by encouraging people to report the smallest incident. The idea being if you stop the small things, you will prevent the larger things. This was fine for the small things, nobody minds being told to use a coaster for their coffee cup. Bit different when the building burns down. | ||
It did lead to a bit of a sub-culture: whilst they operated a blame-free policy, they did like to know whose fault it was. ↩ |
†2 | MS DOS 6.22 was a Microsoft operating system that predated Windows. If your curious, or too young to remember, here’s an online emulator: MS DOS 6.22 it comes with pretty cool versions of Doom and Duke Nukem. ↩ |
†3 | GUI A graphical user interface: a type of user interface that allows users to interact with a computer or device through visual elements like icons, buttons, and menus — like Microsoft Windows. ↩ |
†4 | I’m English and the word, git has a meaning in England: git [noun] a contemptible, stupid or unpleasant person, usually a man — “You miserable git!”. ↩ |
†5 | I’m getting on a bit, and before I sink into my dotage and start dribbling into my porridge, I’ve decided to give something back; I’m passing on my knowledge and experience to the next generation and to anyone else that is interested. ↩ |