HI! Git is an extremely powerful and often elusive tool to learn. If you do read the man pages, you often see garbage like this:

If <upstream> is not specified, the upstream configured in
branch.<name>.remote and branch.<name>.merge options will be used 
(see git-config(1) for details) and the --fork-point option is 

These pages will help you discover how to use git, learn the language that it uses to describe what it does, and alert to you some of the common pitfalls and problems that can occur. Elevate your knowledge of git from ‘I can add and push code’, to that of a version control Jedi.


  1. Git references


  1. How to write good commit messages
  2. cherry-pick - re-apply a commit
  3. reset - undoing commits and merges


  1. merge - simple merges, converge two branches of commits
  2. rebase - apply local commits on top of another branch
  3. rebase --interactive - change git history, tidy up commits
  4. push --force-with-lease - rebasing safely, changing common history


  1. log, log back x steps, log grepping
  2. shortlog for changelogs
  3. reflog - git log’s paranoid brother, fuck up recovery

Finding problems

  1. blame - finding the author of a change
  2. bisect - finding the commit that caused regression/bug

Other bits

  1. Internals - how does git store stuff?
  2. Setting aliases
  3. Cleaning up, git prune & git gc