Slide 1

Slide 1 text

Git Better Becoming a more skillful collaborator A talk by orderedlist

Slide 2

Slide 2 text

Trees Snapshots of a directory

Slide 3

Slide 3 text

Working Directory file1 v1 file2 v1 file3 v1

Slide 4

Slide 4 text

$ git init

Slide 5

Slide 5 text

Working Directory Index file1 v1 file2 v1 file3 v1 HEAD → master

Slide 6

Slide 6 text

$ git status On branch master Initial commit Untracked files: (use "git add ..." to include in what will be committed) file1 file2 file3 nothing added to commit but untracked files present (use "git add" to track)

Slide 7

Slide 7 text

Working Directory Index file1 v1 file2 v1 file3 v1 HEAD → master Unstaged Diff Staged Diff

Slide 8

Slide 8 text

$ git add file1

Slide 9

Slide 9 text

Working Directory Index file1 v1 file2 v1 file3 v1 file1 v1 HEAD → master

Slide 10

Slide 10 text

$ git status On branch master Initial commit Changes to be committed: (use "git rm --cached ..." to unstage) new file: file1 Untracked files: (use "git add ..." to include in what will be committed) file2 file3

Slide 11

Slide 11 text

Working Directory Index file1 v1 file2 v1 file3 v1 file1 v1 HEAD → master Unstaged Diff Staged Diff

Slide 12

Slide 12 text

$ git commit -m "Initial commit" [master (root-commit) e327139] Initial commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 file1

Slide 13

Slide 13 text

Working Directory Index file1 v1 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 e327139

Slide 14

Slide 14 text

Working Directory Index file1 v1 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 e327139

Slide 15

Slide 15 text

$ git add file2 file3 On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) new file: file2 new file: file3

Slide 16

Slide 16 text

Working Directory Index file1 v1 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 SHA: e327139 file2 v1 file3 v1

Slide 17

Slide 17 text

$ git commit -m "Adding files" [master cde7f23] Adding files 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 file2 create mode 100644 file3

Slide 18

Slide 18 text

Working Directory Index file1 v1 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 SHA: e327139 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 19

Slide 19 text

Working Directory Index file1 v1 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 SHA: e327139 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 20

Slide 20 text

$ echo v2 > file1

Slide 21

Slide 21 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 SHA: e327139 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 22

Slide 22 text

$ git status On branch master Changes not staged for commit: (use "git add ..." to update what will be committed) (use "git checkout -- ..." to discard changes in working directory) modified: file1 no changes added to commit (use "git add" and/or "git commit -a")

Slide 23

Slide 23 text

$ git add file1

Slide 24

Slide 24 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 SHA: e327139 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v2

Slide 25

Slide 25 text

$ git status On branch master Changes to be committed: (use "git reset HEAD ..." to unstage) modified: file1

Slide 26

Slide 26 text

$ git commit -m "Modify file1" [master d59baaf] Modify file1 1 file changed, 1 insertion(+)

Slide 27

Slide 27 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 SHA: e327139 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf

Slide 28

Slide 28 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file1 v1 SHA: e327139 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf

Slide 29

Slide 29 text

Reset 3 ways to move backward

Slide 30

Slide 30 text

Soft Reset Move HEAD

Slide 31

Slide 31 text

$ git reset --soft HEAD~1

Slide 32

Slide 32 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf

Slide 33

Slide 33 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v2

Slide 34

Slide 34 text

$ git config --global alias.undo 'reset --soft HEAD~1'

Slide 35

Slide 35 text

$ git undo

Slide 36

Slide 36 text

Mixed Reset Move HEAD and update the index

Slide 37

Slide 37 text

$ git reset HEAD~1

Slide 38

Slide 38 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 39

Slide 39 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 40

Slide 40 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 41

Slide 41 text

$ git reset HEAD

Slide 42

Slide 42 text

Working Directory Index file3 v1 file1 v1 HEAD → master file2 v2 file3 v1 file1 v1 SHA: e327139 file1 v3 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file2 v2 file1 v3

Slide 43

Slide 43 text

Working Directory Index file3 v1 file1 v1 HEAD → master file2 v2 file3 v1 file1 v1 SHA: e327139 file1 v3 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file2 v2 file1 v3

Slide 44

Slide 44 text

$ git reset HEAD -- file1

Slide 45

Slide 45 text

$ git config --global alias.unstage 'reset HEAD --'

Slide 46

Slide 46 text

$ git unstage

Slide 47

Slide 47 text

$ git unstage file1

Slide 48

Slide 48 text

Hard Reset Move HEAD, update the index and working directory

Slide 49

Slide 49 text

Caution Hard reset can cause data loss

Slide 50

Slide 50 text

$ git reset --hard HEAD~1

Slide 51

Slide 51 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file1 v1 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 52

Slide 52 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 53

Slide 53 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 54

Slide 54 text

$ git reset --hard HEAD

Slide 55

Slide 55 text

Working Directory Index file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 file2 v2 file1 v3 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf

Slide 56

Slide 56 text

Working Directory Index file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file2 v2 file1 v3 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf

Slide 57

Slide 57 text

Not recommended without saving to the repo first

Slide 58

Slide 58 text

Stash Save work for later

Slide 59

Slide 59 text

Working Directory Index file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file2 v2 file1 v3

Slide 60

Slide 60 text

$ git stash -u

Slide 61

Slide 61 text

$ git stash save -u 'Description'

Slide 62

Slide 62 text

Working Directory Index HEAD → master file1 v1 SHA: e327139 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 file2 v2 file1 v3 file3 v1 file2 v2 file1 v3

Slide 63

Slide 63 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 SHA: e327139 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file3 v1 file2 v2 file1 v3 stash@{0}

Slide 64

Slide 64 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 SHA: e327139 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf stash@{0} file3 v1 file2 v2 file1 v3

Slide 65

Slide 65 text

$ echo v2 > file3

Slide 66

Slide 66 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 SHA: e327139 file1 v1 file2 v1 file3 v1 file1 v2 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v2 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf stash@{0} file3 v1 file2 v2 file1 v3

Slide 67

Slide 67 text

$ git add file3

Slide 68

Slide 68 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 SHA: e327139 file1 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v2 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf stash@{0} file2 v1 file1 v2 file3 v2 file3 v1 file2 v2 file1 v3

Slide 69

Slide 69 text

$ git commit -m 'Modify file3'

Slide 70

Slide 70 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v2 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf stash@{0} file2 v1 file1 v2 file3 v2 file1 v1 file2 v1 file3 v2 file1 v2 SHA: 04ed46a file3 v1 file2 v2 file1 v3

Slide 71

Slide 71 text

$ git stash list stash@{0}: WIP on master: d59baaf Modify file1

Slide 72

Slide 72 text

$ git stash show file1 | 2 +- file2 | 1 + 2 files changed, 2 insertions(+), 1 deletion(-)

Slide 73

Slide 73 text

$ git stash show stash@{0}

Slide 74

Slide 74 text

$ git stash pop

Slide 75

Slide 75 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v2 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file3 v1 file2 v2 file1 v3 stash@{0} file2 v1 file1 v2 file3 v2 file1 v1 file2 v1 file3 v2 file1 v2 SHA: 04ed46a

Slide 76

Slide 76 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v2 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file3 v2 file2 v2 file1 v3 file2 v1 file1 v2 file3 v2 file1 v1 file2 v1 file3 v2 file1 v2 SHA: 04ed46a

Slide 77

Slide 77 text

$ git stash apply

Slide 78

Slide 78 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v2 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file3 v1 file2 v2 file1 v3 stash@{0} file2 v1 file1 v2 file3 v2 file1 v1 file2 v1 file3 v2 file1 v2 SHA: 04ed46a file3 v1 file2 v2 file1 v3

Slide 79

Slide 79 text

file3 v1 file1 v1 file2 v2 file3 v1 file1 v2 file2 v2 file1 v3 Working Directory Index HEAD → master file1 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 file2 v1 file3 v2 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file3 v1 file2 v2 file1 v3 stash@{0} file2 v1 file1 v2 file3 v2 file1 v1 file2 v1 file3 v2 file1 v2 SHA: 04ed46a file3 v2 file2 v2 file1 v3

Slide 80

Slide 80 text

$ git stash branch new-branch-name stash@{0}

Slide 81

Slide 81 text

Reflog A meta repo for your repo

Slide 82

Slide 82 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v2 SHA: d59baaf file1 v1 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 83

Slide 83 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 84

Slide 84 text

Working Directory Index file1 v2 file2 v1 file3 v1 file1 v1 HEAD → master file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1 file1 v1 SHA: e327139 file1 v2 file1 v1 file2 v1 file3 v1 file1 v1 file2 v1 file3 v1 file1 v1 SHA: cde7f23 file2 v1 file3 v1

Slide 85

Slide 85 text

$ git log commit cde7f23cb3d8a3de59b7042e21ea04953d4f3ea3 Author: Steve Smith Date: Fri Jun 19 21:41:43 2015 -0400 Adding files commit e327139d70d9a07ddcca0a83833f113ecffb6780 Author: Steve Smith Date: Fri Jun 19 21:05:00 2015 -0400 Initial commit

Slide 86

Slide 86 text

$ git reflog cde7f23 HEAD@{0}: reset: moving to HEAD~ d59baaf HEAD@{1}: commit: Modify file1 cde7f23 HEAD@{2}: commit: Adding files e327139 HEAD@{3}: commit (initial): Initial commit

Slide 87

Slide 87 text

$ git reset --hard d59baaf

Slide 88

Slide 88 text

$ git log commit d59baafe0279d67a527ee095d0022d8a44aa0017 Author: Steve Smith Date: Sat Jun 20 10:08:21 2015 -0400 Modify file1 commit cde7f23cb3d8a3de59b7042e21ea04953d4f3ea3 Author: Steve Smith Date: Fri Jun 19 21:41:43 2015 -0400 Adding files commit e327139d70d9a07ddcca0a83833f113ecffb6780 Author: Steve Smith Date: Fri Jun 19 21:05:00 2015 -0400 Initial commit

Slide 89

Slide 89 text

$ git checkout -b new-branch-name d59baaf

Slide 90

Slide 90 text

$ git reflog show feature-branch

Slide 91

Slide 91 text

$ git reflog show master@{1.week.ago}

Slide 92

Slide 92 text

Interactive Rebase Rewriting history

Slide 93

Slide 93 text

$ git log 98e64d6 Fix display bug Fixes #145 cac9ec3 Update comparison text 23c925b Actually Fix display bug Fixes d210f51 I hate display bugs ada9e45 Better markup for container 19181bd /khanify display bugs aca26af F$#*&%*!!! 575c779 I am dumb

Slide 94

Slide 94 text

Fix before you push Force pushing is just rude

Slide 95

Slide 95 text

$ git rebase -i HEAD~8

Slide 96

Slide 96 text

pick 98e64d6 Fix display bug Fixes #145 pick cac9ec3 Update comparison text pick 23c925b Actually Fix display bug Fixes pick d210f51 I hate display bugs pick ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 97

Slide 97 text

pick 98e64d6 Fix display bug Fixes #145 pick cac9ec3 Update comparison text pick 23c925b Actually Fix display bug Fixes pick d210f51 I hate display bugs pick ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 98

Slide 98 text

pick 98e64d6 Fix display bug Fixes #145 r cac9ec3 Update comparison text pick 23c925b Actually Fix display bug Fixes pick d210f51 I hate display bugs pick ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 99

Slide 99 text

pick 98e64d6 Fix display bug Fixes #145 r cac9ec3 Update comparison text pick 23c925b Actually Fix display bug Fixes pick d210f51 I hate display bugs pick ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 100

Slide 100 text

pick 98e64d6 Fix display bug Fixes #145 f 23c925b Actually Fix display bug Fixes r cac9ec3 Update comparison text pick d210f51 I hate display bugs pick ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 101

Slide 101 text

pick 98e64d6 Fix display bug Fixes #145 f 23c925b Actually Fix display bug Fixes r cac9ec3 Update comparison text pick d210f51 I hate display bugs pick ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 102

Slide 102 text

pick 98e64d6 Fix display bug Fixes #145 f 23c925b Actually Fix display bug Fixes f d210f51 I hate display bugs r cac9ec3 Update comparison text pick ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 103

Slide 103 text

pick 98e64d6 Fix display bug Fixes #145 f 23c925b Actually Fix display bug Fixes f d210f51 I hate display bugs r cac9ec3 Update comparison text pick ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 104

Slide 104 text

pick 98e64d6 Fix display bug Fixes #145 f 23c925b Actually Fix display bug Fixes f d210f51 I hate display bugs r cac9ec3 Update comparison text r ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 105

Slide 105 text

pick 98e64d6 Fix display bug Fixes #145 f 23c925b Actually Fix display bug Fixes f d210f51 I hate display bugs r cac9ec3 Update comparison text r ada9e45 Better markup for container pick 19181bd /khanify display bugs pick aca26af F$#*&%*!!! pick 575c779 I am dumb # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 106

Slide 106 text

pick 98e64d6 Fix display bug Fixes #145 f 23c925b Actually Fix display bug Fixes f d210f51 I hate display bugs f 19181bd /khanify display bugs f aca26af F$#*&%*!!! f 575c779 I am dumb r cac9ec3 Update comparison text r ada9e45 Better markup for container # Rebase a3464a3..33854e7 onto a3464a3 ( 2 TODO item(s)) # # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell # # These lines can be re-ordered; they are executed from top to bottom. # # If you remove a line here THAT COMMIT WILL BE LOST. # # However, if you remove everything, the rebase will be aborted.

Slide 107

Slide 107 text

Update comparison text # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Fri Jun 19 21:41:43 2015 -0400 # # rebase in progress; onto e327139 # You are currently editing a commit while rebasing branch 'master' on 'e327139'. # # Changes to be committed: # modified: index.html #

Slide 108

Slide 108 text

Update comparison text Fixes #174 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Fri Jun 19 21:41:43 2015 -0400 # # rebase in progress; onto e327139 # You are currently editing a commit while rebasing branch 'master' on 'e327139'. # # Changes to be committed: # modified: index.html #

Slide 109

Slide 109 text

Better markup for container # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Fri Jun 19 21:41:43 2015 -0400 # # rebase in progress; onto e327139 # You are currently editing a commit while rebasing branch 'master' on '83833f1'. # # Changes to be committed: # modified: index.html # modified: styles/stylesheet.css #

Slide 110

Slide 110 text

Better markup for container Fixes #166 # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # Date: Fri Jun 19 21:41:43 2015 -0400 # # rebase in progress; onto e327139 # You are currently editing a commit while rebasing branch 'master' on '83833f1'. # # Changes to be committed: # modified: index.html # modified: styles/stylesheet.css #

Slide 111

Slide 111 text

$ git log e327139 Fix display bug Fixes #145 83833f1 Update comparison text Fixes #174 7e03c29 Better markup for container Fixes #166

Slide 112

Slide 112 text

Blame Spelunk who and why

Slide 113

Slide 113 text

WTF?

Slide 114

Slide 114 text

$ git blame lib/index.js

Slide 115

Slide 115 text

No content

Slide 116

Slide 116 text

No content

Slide 117

Slide 117 text

$ git show a8fd0459

Slide 118

Slide 118 text

No content

Slide 119

Slide 119 text

No content

Slide 120

Slide 120 text

OMG!

Slide 121

Slide 121 text

No content

Slide 122

Slide 122 text

No content

Slide 123

Slide 123 text

TEH PR!

Slide 124

Slide 124 text

No content

Slide 125

Slide 125 text

Trees Snapshots of directories in time

Slide 126

Slide 126 text

Reset Modify HEAD, index, and working directory

Slide 127

Slide 127 text

Stash Save work for later

Slide 128

Slide 128 text

Reflog History of history

Slide 129

Slide 129 text

Interactive Rebase Make yourself seem super organized

Slide 130

Slide 130 text

Blame Find who and, hopefully, why

Slide 131

Slide 131 text

Questions?

Slide 132

Slide 132 text

Thank you! Git Better A talk by orderedlist