Last week I sat down with a dozen people to run them through a basic Git Training Course. I would have said I was “Git Intermediate” going in, and have a learned a ton in the preps, so there’s nothing like training people to sharpen your skills!

The audience were all Java and Dotnet developers, most with some revision control experience, some with real-world Git experience. I developed the course with a more experienced Git developer, who was supporting me on the day with deep-dives and examples (which was awesome - love the dual trainer thing, good for the class too).

Let’s get Meta. So what did I learn about how people learn Git?

  • We covered about 30 commands during the course of a 7 hour day (zoom in on the training board picture that we were walking through above), and I was surprised that I use nearly all of those commands every day (so the Git feature set is much broader than your typical SVN/CVS flow).
  • Git Internals are so “wafer-thin-below-the-surface” that you might as well teach how Git works from the start. Next time I’ll use a desk workflow with paper cards to discuss how DAGs hang together after the first module of playing. I like what this guy did, and I would like to try that with index cards.
  • Teaching people the Reflog early really helps them to get that things are very safe with Git, much safer than with anything else they’ve used - and that a commit really is immutable (regardless of what they hear about rewriting history/commits/etc). That knowledge actually gives you confidence to, well, rewrite history. :-)
  • Remoting is really where people started to fall off the wagon. They could live with a staging area, but the idea of local and remote repos really needed a lot more exercises and a lot more experimenting. Pull/Fetch and diffing from master..origin/master… wat? Well.. Next round of courseware will spend more time on that. And more exercises.
  • Learning how Reset really works also requires a really solid mental model of the Git DAG. Next time I will spend more time on paper away from the terminal working through all this on index cards before we get lost in the weeds.
  • People were more comfortable with rebasing than I thought. In fact, interactive rebasing was totally fine, and rebasing master to branch seemed to have a pretty clear mental model for most people.
  • We taught everything through Git Bash, and I probably would offer Posh Git as a good albeit slow Powershell alternative for the guys who were new to Unix.
  • Giving people concrete ideas on team Git workflows (such as GitHub Flow) is really helpful when you have so much flexibility. Need to workshop that one a bit hard for next time.
    Anyways, once I fix up a few corrections to the notes we used on the day, I'll post them here (not sure they'll be very useful to you since I'm certainly no [Matt/Tim](http://training.github.com/), but it might give you ideas for exercises to introduce to your own teams).
    Rebase early, and love the Reflog!
    **Update:** Slides below. Download them to get the PPT with the training notes on the speaker slides.
    ** [Git One Day Training Notes](http://www.slideshare.net/glen_a_smith/git-one-day-training-notes "Git One Day Training Notes") ** from **[glen_a_smith](http://www.slideshare.net/glen_a_smith)**