Git is a powerful tool for describing and maintaining the history of a project, but most people never get beyond the basics. By giving you the ability to rewrite history (with the safety of never truly losing information), git allows you to craft a history that is more true to the intent of your changes, rather than one filled with countless "oops" and "fixed typo" commits. Of course, with great power comes great responsibility, and it is important to wield your time-travelling powers with restraint. In this talk, you'll learn how to clean up your history without confusing others, as well as how to recover if things go wrong.
You'll also learn more about the conceptual model behind git and how to bend it to your will. Once you understand how commits and branches really work, you can compose your git tools to do what you want. Need to insert a commit in the middle of a branch? See who introduced the bug two weeks ago that surfaced in production today? Resolve merge conflicts cleanly? Break a large commits into several smaller ones, or squash several smaller ones together into one? With git, you can do it.