Day 1
Yo, DAG
- A DAG refresher
- Blobs, trees, and commits
- Why SHA-1s and not version numbers
- Specifying revisions and commit ranges
- Viewing old revisions of files
- The index, revisited
- Atomic commits
- Valuing the version history
Branches, shoots, and leaves
- Creating, moving between and deleting branches
- HEAD and detached HEAD mode
- Working with remotes
- Remote branches and refspecs
- Tags, lightweight and annotated
- Tags and remotes
- Tags and branches under the hood
- The describe command
All your rebase…
- A merging refresher
- pull = fetch + merge
- The undesirability of merge commits
- Rewriting history
- The push/rebase tension
- cherry-picking commits
- Interactive rebasing
Wrappers and graphical tools: a quick overview
- GitHub
- Gists
- Gerrit
- gitk
- Git Extensions
- GitX
Day 2
Working with commits and changes
- Patches
- Stashing
- The reflog
- Recovering from mistakes
- Searching the commit history efficiently
- git-bisect
Working with branches
- Types of branches
- Merging strategies
- Upstream/downstream relationships
- In-house patches of upstream code
- Different team workflows
Hooks
- The hooks directory
- The why and how of git hooks
- Some useful scenarios with hooks
Good to know
- The reset command demystified
- Common problems and their solutions
- Git shortcomings