Length: 2 days (16 hours)

Description: Git is a distributed, open-source version-control system. It is free to download and use, and is a sophisticated, flexible, and high-speed software system for handling version control. Git is distributed, so everyone can create and revert commits, even if they’re disconnected from the Internet. It knows how to handle branches and merges more easily than nearly any other version-control system.

However, Git is notoriously difficult for developers to learn and understand. Companies that adopt Git gain a lot, but their developers often suffer along the way.

This is the course that some of the world’s largest and best-known companies (including Cisco, Freescale, and Texas Instruments) invite me to teach, again and again, to help their developers adopt and use Git into their day-to-day programming.

This course is designed to help people learn and understand Git, so that they can use it in their day-to-day lives. It not only teaches the “what” of Git, but the “how” and the “why,” as well. At the end of this two-day course, participants will be able to use Git in their daily work.

Participants will receive PDF copies of the slides, and a list of the tasks on which we worked during the course.

This course, like all of my courses, can be given either in-person or virtually. Contact me for availability and pricing, but be warned that my time tends to fill up months in advance.


  • Introduction to Git, and what is version control?
  • Repositories: Creation and configuration
  • Committing
  • Staging vs. committing
  • Git status messages
  • Git logs (reading and sorting)
  • HEAD, commits, and branches
  • Fixing mistakes
    • Reverting
    • Amending
    • Resetting
  • Git theory and objects: Commits, blobs, trees, and tags
  • Branches
    • What is a branch?
    • Moving between branches
    • Removing branches
  • Merging
    • Fast forward
    • Merge commit
    • Handling Conflicts
  • Advanced merging • Rebase
    • Interactive rebase
    • Squash
    • Cherry pick
  • Remote branches
    • Remotes
    • Clone
    • Pull and push
    • Avoiding trouble
    • Collaboration via private, shared branches
    • Handling conflicts
    • Branching + merging strategies
    • Administering remote branches
  • Collaboration (as appropriate)
    • GitHub/GitLab/BitBucket — pull requests
    • Gerrit
  • Misc. topics
    • git blame
    • git bisect
    • Configuration options
    • Tagging
    • Hooks