Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Quick Git Talk

Quick Git Talk


Randall Hunt

July 16, 2014


  1. Git Some Lernin How To Git For Great Good

  2. Why Version Control? • Because I Say So.

  3. Why Git? • Because I Say So.

  4. Vocabulary • Repository -- Holds the history of all changes

    • Commit -- A point in time snapshot of your repo • Reference -- Something that makes it so you don't have to remember a 40 hexadecimal digit sha1 hash • Branch -- A pointer to the head of a group of commits • Remote -- A thing you push to and pull from • Pull Request -- How you get your code reviewed (unless you're on kernel) • Github -- Magic
  5. Porcelain

  6. 1. Fork a project 2. Clone your fork 3. Branch

    4. Edit some files 5. Commit 6. Repeat 4 and 5 until feature/bug is complete 7. REBASE to create a history that I won't mind reading through 8. Pull any changes that have happened on non-forked master in the interim and rebase on top of those if you want a linear history otherwise do nothing for this step 9. Open pull request from your branch on your fork into the canonical repo's master branch 10. Profit
  7. How To Branch • git checkout -b improvement/unicorns • git

    branch bug/voldemort && git checkout bug/voldemort
  8. How To Commit • Edit Some Stuff • git add

    -p and git add (DO NOT GIT ADD * or .) • Review what is in staging with git diff --cached and git status • git commit
  9. Commit Messages • Start with bug number and short description

    <70 characters • Longer description after one blank line
  10. Index == Staging • STAGE EVERYTHING • Save time later

    by staging only some logical changes now
  11. Demo

  12. Refs • N^ goes up N parents (HEAD^, HEAD^100) •

    ~ selects merge parents (HEAD~, HEAD~2) • Mix and match (don't actually though) • HEAD is hard coded and always points to the current head of whatever branch you have checked out • Almost everything can be treated as a ref
  13. Remotes [remote "origin"] url = git@github.com:ranman/fancy-project.git fetch = +refs/heads/*:refs/remotes/origin/*

  14. Everything is an object (content addressable storage)

  15. • Blob (zlib compressed bytes representing a file) • Tree

    (a tree where the leaf nodes are blobs) • Commit (a pointer to: a tree, n parent commits) • Tag (a pointer to a commit) • (IGNORE THIS) something something packfiles
  16. None
  17. None
  18. None
  19. You're just moving some pointers around.

  20. Dat Network

  21. None
  22. None
  23. Fancy Random Things

  24. Find Lost Stuff • git reflog • git fsck [--lost-found]

    • git log -G • git branch --contains SHA-1
  25. Find Bugs • git bisect

  26. tig

  27. git log branchA ^branchB

  28. git log branchA..branchB git log branchB..branchA git log branchA...branchB

  29. Undo • git reset --soft HEAD^ • git reset --hard

  30. Config • git config --global help.autocorrect 1 • git config

    --global rerere.enabled 1 • git config --global color.ui 1 • git diff --word-diff
  31. None
  32. gitshots

  33. None