We start with the basics: What problems are version control systems intended to solve? We’ll see how to solve these problems by using git. We’ll learn some standard git-based workflows. We learn about the git repository as a graph; each git commit is a node in that graph. Finally, we’ll take away strategies and steps to follow when things didn’t go as intended. We’ll learn specifics such as squashing commits (why, and how to do safely); rebase vs. merge; signing commits; features specific to GitHub or Gitlab.