You've been using Git for a while and feel pretty comfortable with the basics: committing, creating branches, merging — you got that. However, something is missing; maybe you feel you're not taking full advantage of what Git has to offer; maybe you occasionally end up with an entangled history and would like to know how to avoid that. You want to know more. If this sounds like your situation, then this workshop is for you.
Mastering Git is about going beyond the basics and learn to truly unleash the power of Git to support your working style, both individually and in your team.
You will discover that Git is so much more than simply branching and merging; its unique features are designed to allow you to take care of your project's history while, at the same time, enabling new forms of collaboration. And that's not all: along the way you'll pick up a few tricks that will directly improve your personal day-to-day workflow.
## What You Will Learn ##
The goal of this workshop is to teach you to take advantage of the unique features that set Git apart from the other version control systems.
You'll start out by learning the value of keeping a clean history and how Git was designed to let you do just that. You'll become aware of what makes a good commit and how you can apply those principles to your project. We'll also discuss the pros and cons of rewriting commits and the eternal debate of readable history vs. true history.
Next, you'll learn about the different branching strategies (like GitFlow and GitHub Flow), their advantages and disadvantages and when it makes sense to use one or the other in a given project. You will also learn how to use submodules to manage the dependencies between different projects.
Along the way, you will also pick up a few techniques that will make your personal workflow more efficient; among other things, you'll learn how to use the reflog to recover seemingly lost commits, how to work on different tasks in parallel by keeping multiple working directories and how to quickly find the commit that introduced a bug by doing a binary search.
## Topics ##
* The importance of keeping a good-looking history
* ACID commits
* Ensuring consistent line-endings and whitespace
* When and how to rewrite history
* The many ways to use git-rebase
* Choosing a branching strategy for your project
* GitFlow vs. GitHub Flow vs. Your Own Flow™
* Managing dependencies between projects with submodules
* Searching history
* Recovering lost commits
* Reusing conflict resolutions
* Managing multiple working directories
* Keeping your repository clean
## Prerequisites ##
To get the most out of "Mastering Git", you should feel confident with Git's fundamental concepts. If you'd like to strengthen your knowledge in that area, it might be a good idea to combine this with the "Understanding Git" workshop; they complement each other pretty well, since they both share the same visualization techniques to explain the concepts.
You should also be familiar with handling a command-line shell. During the workshop, I'll be using both PowerShell and Bash.