> For the complete documentation index, see [llms.txt](https://guide.ivanzakutnii.com/the-hard-way-to-swe-excellence/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://guide.ivanzakutnii.com/the-hard-way-to-swe-excellence/learning-path/version-control-system.md).

# Version Control System

I am talking about Git. Learn it early and use it for every program you care about.

> Other version-control systems exist. Git is the practical default for this guide because it is widely used and has abundant learning material.

This section is small, but Git deserves deliberate practice because every later project will rely on it.

Register on [GitHub](https://github.com/) or another Git host and learn how a local repository relates to a remote one. Git is the version-control system; GitHub is one service that hosts Git repositories.

Use one coherent introduction, then practise in your own repository:

* [Pro Git](https://git-scm.com/book/en/v2) — the free reference book
* [Learn Git Branching](https://learngitbranching.js.org/) — an interactive visual exercise
* [GitHub's Hello World guide](https://docs.github.com/en/get-started/start-your-journey/hello-world) — repositories, branches, commits, and pull requests

Before moving on, make sure you can:

* initialize and clone a repository;
* inspect `status`, a diff, and the history;
* make focused commits with useful messages;
* create and merge a branch;
* push, pull, and understand what a remote-tracking branch represents;
* resolve a simple merge conflict;
* restore or revert a mistaken change without deleting unrelated work.

Do these operations on a disposable practice repository before you need them on important work.
