Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You

308 views

Published on

Git is a powerful, critical, yet poorly understood tool that virtually all Open Source developers use. One of the key features that git provides is a powerful and comprehensive log that displays the history of all the changes that have happened in a project, including potential developments that weren't ever merged, details about former versions of software that can inform future development, and even such mundane details as whether development on feature A started before or after development of bugfix B.

Despite the power and utility of git's log, few developers take full advantage of it. Worse, some common practices that developers have adopted in the name of convenience (or just plain cargo culting) can actually destroy this useful information. Moreover, if developers are following the common exhortation to "commit often", they may end up with logs full of uninteresting noise, as all the details of debugging attempts and experiments are inadvertently recorded.

This talk will:

* detail the potential benefits of having informative and well structured logs
* discuss common developer habits that can make logs less useful
* explain techniques to preserve informative development history

Published in: Software
  • Be the first to comment

  • Be the first to like this

Logs Are Magic: Why Git Workflows and Commit Structure Should Matter To You

  1. 1. photo: https://cdn.pixabay.com/photo/2014/10/01/17/59/ my-little-pony-468916960720.jpg logs are magic! john sj anderson | @genehack | openwest 2017 | salt lake city 1 — Logs Are MAGIC — OpenWest 2017 — @genehack
  2. 2. photo: https://cdn.pixabay.com/photo/2014/10/01/17/59/ my-little-pony-468916960720.jpg why git workflows & commit structure should matter to you john sj anderson | @genehack | openwest 2017 | salt lake city 2 — Logs Are MAGIC — OpenWest 2017 — @genehack
  3. 3. hi, i’m john. a/k/a @genehack 3 — Logs Are MAGIC — OpenWest 2017 — @genehack
  4. 4. In my day job, Iʼm the VP of Technology for Infinity, a small IT consultancy. vp, technology infinity interactive 4 — Logs Are MAGIC — OpenWest 2017 — @genehack
  5. 5. I wanted to give this talk because I love revision control. Iʼve kept my home directory under revision control for over a decade, I maintain a Perl git wrapper module, and I wrote this thing called GitGot to automate batch ops across multiple Git repos (but thatʼs a different talk) i ❤ revision control5 — Logs Are MAGIC — OpenWest 2017 — @genehack
  6. 6. I liked CVS... cvs6 — Logs Are MAGIC — OpenWest 2017 — @genehack
  7. 7. I liked SVN a bit more... svn7 — Logs Are MAGIC — OpenWest 2017 — @genehack
  8. 8. Hell, I even liked RCS rcs8 — Logs Are MAGIC — OpenWest 2017 — @genehack
  9. 9. Actually, thatʼs a lie -- I donʼt think anybody liked RCS. Anybody here remember RCS? Anybody still using RCS? rcs9 — Logs Are MAGIC — OpenWest 2017 — @genehack
  10. 10. And now we have git git10 — Logs Are MAGIC — OpenWest 2017 — @genehack
  11. 11. I love git. Git makes me happy i ❤ git 11 — Logs Are MAGIC — OpenWest 2017 — @genehack
  12. 12. How many people have used git at least once? How many people feel comfortable in git? How many people would call themselves git “experts”? quick poll! 12 — Logs Are MAGIC — OpenWest 2017 — @genehack
  13. 13. So, if youʼre not at least a little familiar with git, this talk is probably not going to that interesting -- most of the stuff Iʼm going to talk about does apply to all revision control systems, but my examples and recommendations are all git-based what this talk isn’t13 — Logs Are MAGIC — OpenWest 2017 — @genehack
  14. 14. Iʼm also not going to be claiming to dispense any universal truths in this talk... no universal truths14 — Logs Are MAGIC — OpenWest 2017 — @genehack
  15. 15. Iʼm not even going to try to convince you that anything Iʼm telling you is a “best practice”. Pretty much anything I advocate in here, Iʼm sure people will be able to come up with an example where Iʼd say, “yeah, for that, donʼt do it” not even “best practices”15 — Logs Are MAGIC — OpenWest 2017 — @genehack
  16. 16. So what is this talk about then? what this talk is16 — Logs Are MAGIC — OpenWest 2017 — @genehack
  17. 17. Opinionated commentary on some aspects of using revision control systems... some opinions 17 — Logs Are MAGIC — OpenWest 2017 — @genehack
  18. 18. ...based on things Iʼve seen over the past mumble years making extensive use of revision control on personal, open source, and commercial software projects photo modified from http://i2.kym-cdn.com/photos/images/original/ 001/044/247/297.png backed up with experience 18 — Logs Are MAGIC — OpenWest 2017 — @genehack
  19. 19. Some of this stuff may be more important for larger projects with multi-person teams ... maybe more important for larger projects 19 — Logs Are MAGIC — OpenWest 2017 — @genehack
  20. 20. ...but itʼs also important if youʼve just started a project that youʼre thinking might grow into something bigger. Having a solid project history from the get-go can make it a lot easier for contributors to come on board and start pitching in but also good for projects that aspire to be bigger20 — Logs Are MAGIC — OpenWest 2017 — @genehack
  21. 21. maybe more relevant for coding projects 21 — Logs Are MAGIC — OpenWest 2017 — @genehack
  22. 22. but also applicable for doc or config repos 22 — Logs Are MAGIC — OpenWest 2017 — @genehack
  23. 23. Eventually weʼre going to talk about how to make better use of the history in your repos ... making better use of history 23 — Logs Are MAGIC — OpenWest 2017 — @genehack
  24. 24. ...but first, weʼre going to talk about ways to make better history making better history24 — Logs Are MAGIC — OpenWest 2017 — @genehack
  25. 25. For all these things, there are a few common elements prerequisites 25 — Logs Are MAGIC — OpenWest 2017 — @genehack
  26. 26. For maximum value, youʼre going to want to apply them consistently consistency 26 — Logs Are MAGIC — OpenWest 2017 — @genehack
  27. 27. Make them into habits habits 27 — Logs Are MAGIC — OpenWest 2017 — @genehack
  28. 28. Theyʼre pretty much all the type of thing that if you do them all the time... do it all the time28 — Logs Are MAGIC — OpenWest 2017 — @genehack
  29. 29. ...you eventually will just do them without thinking too much about it then you don’t have to think about it29 — Logs Are MAGIC — OpenWest 2017 — @genehack
  30. 30. or even better, if youʼre the right kind of twisted... even better30 — Logs Are MAGIC — OpenWest 2017 — @genehack
  31. 31. ...youʼll automate things. for example, i periodically run some scripts to find repos in a “dirty” state, or that have local commits that havenʼt been pushed to a remote, and then clean them up automate it31 — Logs Are MAGIC — OpenWest 2017 — @genehack
  32. 32. so, moving on to how to make better history how to make better history32 — Logs Are MAGIC — OpenWest 2017 — @genehack
  33. 33. if youʼre going to talk about git, you almost have to talk about workflows. potentially one of the more contentious aspects of starting a new project is deciding what your workflow is going to be workflows 33 — Logs Are MAGIC — OpenWest 2017 — @genehack
  34. 34. workflows can range from the very simple -- just a single branch in a local-only repo, just adding commits onto the HEAD of that branch photo credit: modified by https://www.flickr.com/photos/appleboy/ 5488984566/in/photostream/ no remote no branches master only 34 — Logs Are MAGIC — OpenWest 2017 — @genehack
  35. 35. or you can have that basic setup, but with a remote that you push things to every so often. this is basically the simplest possible branching workflow -- when you have local commits you havenʼt pushed to the remote yet, thatʼs (if you squint, a bit) a branch photo credit: modified from https://www.flickr.com/photos/appleboy/5488387469/in/ photostream/ local master no branches & periodic pushes 35 — Logs Are MAGIC — OpenWest 2017 — @genehack
  36. 36. all the way up to fairly complicated workflows like git flow, where you have multiple branches in flight at any given point. anybody using git flow, or anything equivalent? photo credit: https://www.flickr.com/photos/appleboy/ 5488984404/in/photostream/ git flow 36 — Logs Are MAGIC — OpenWest 2017 — @genehack
  37. 37. some notable antipatterns37 — Logs Are MAGIC — OpenWest 2017 — @genehack
  38. 38. squashed branches 38 — Logs Are MAGIC — OpenWest 2017 — @genehack
  39. 39. fast forward merges39 — Logs Are MAGIC — OpenWest 2017 — @genehack
  40. 40. this is basically doing extra work to mimic what a fast forward merge probably would have done rebase before merge40 — Logs Are MAGIC — OpenWest 2017 — @genehack
  41. 41. all destroy history41 — Logs Are MAGIC — OpenWest 2017 — @genehack
  42. 42. all destroy history needlessly 42 — Logs Are MAGIC — OpenWest 2017 — @genehack
  43. 43. a linear commit history is a lie43 — Logs Are MAGIC — OpenWest 2017 — @genehack
  44. 44. a linear commit history is a lie (probably) 44 — Logs Are MAGIC — OpenWest 2017 — @genehack
  45. 45. instead 45 — Logs Are MAGIC — OpenWest 2017 — @genehack
  46. 46. some good patterns46 — Logs Are MAGIC — OpenWest 2017 — @genehack
  47. 47. branch 47 — Logs Are MAGIC — OpenWest 2017 — @genehack
  48. 48. branch for errythang48 — Logs Are MAGIC — OpenWest 2017 — @genehack
  49. 49. (specifics will vary)49 — Logs Are MAGIC — OpenWest 2017 — @genehack
  50. 50. have a release branch50 — Logs Are MAGIC — OpenWest 2017 — @genehack
  51. 51. release may be master release may be another branch 51 — Logs Are MAGIC — OpenWest 2017 — @genehack
  52. 52. (again, specifics will vary) 52 — Logs Are MAGIC — OpenWest 2017 — @genehack
  53. 53. merging to the release branch is a release53 — Logs Are MAGIC — OpenWest 2017 — @genehack
  54. 54. (ideally, automatically) 54 — Logs Are MAGIC — OpenWest 2017 — @genehack
  55. 55. make all merges non-FF55 — Logs Are MAGIC — OpenWest 2017 — @genehack
  56. 56. an aside 56 — Logs Are MAGIC — OpenWest 2017 — @genehack
  57. 57. ~/.gitconfig 57 — Logs Are MAGIC — OpenWest 2017 — @genehack
  58. 58. git config --global merge.ff false git config --global pull.ff only 58 — Logs Are MAGIC — OpenWest 2017 — @genehack
  59. 59. [merge] ff = false [pull] ff = only 59 — Logs Are MAGIC — OpenWest 2017 — @genehack
  60. 60. maximal historical information60 — Logs Are MAGIC — OpenWest 2017 — @genehack
  61. 61. keep it clean61 — Logs Are MAGIC — OpenWest 2017 — @genehack
  62. 62. another aside 62 — Logs Are MAGIC — OpenWest 2017 — @genehack
  63. 63. ~/.gitconfig aliases 63 — Logs Are MAGIC — OpenWest 2017 — @genehack
  64. 64. [alias] br = branch ci = commit -v co = checkout st = status 64 — Logs Are MAGIC — OpenWest 2017 — @genehack
  65. 65. aliases have many uses…65 — Logs Are MAGIC — OpenWest 2017 — @genehack
  66. 66. 66 — Logs Are MAGIC — OpenWest 2017 — @genehack
  67. 67. back to keeping it clean… 67 — Logs Are MAGIC — OpenWest 2017 — @genehack
  68. 68. clean up remote branches 68 — Logs Are MAGIC — OpenWest 2017 — @genehack
  69. 69. git push origin :<branch> 69 — Logs Are MAGIC — OpenWest 2017 — @genehack
  70. 70. added in 1.7, early 2010 git push origin --delete <branch> 70 — Logs Are MAGIC — OpenWest 2017 — @genehack
  71. 71. nuke = push origin --delete 71 — Logs Are MAGIC — OpenWest 2017 — @genehack
  72. 72. clean up orphaned remote-tracking branches72 — Logs Are MAGIC — OpenWest 2017 — @genehack
  73. 73. git remote prune origin 73 — Logs Are MAGIC — OpenWest 2017 — @genehack
  74. 74. prune = remote prune origin 74 — Logs Are MAGIC — OpenWest 2017 — @genehack
  75. 75. find unmerged branches75 — Logs Are MAGIC — OpenWest 2017 — @genehack
  76. 76. git branch --no-merged master 76 — Logs Are MAGIC — OpenWest 2017 — @genehack
  77. 77. git branch --no-merged --remote master 77 — Logs Are MAGIC — OpenWest 2017 — @genehack
  78. 78. unmerged = branch --no-merged unmerged-remote = branch --no-merged --remote 78 — Logs Are MAGIC — OpenWest 2017 — @genehack
  79. 79. keep it clean79 — Logs Are MAGIC — OpenWest 2017 — @genehack
  80. 80. one final note on branches80 — Logs Are MAGIC — OpenWest 2017 — @genehack
  81. 81. branch names81 — Logs Are MAGIC — OpenWest 2017 — @genehack
  82. 82. a branch equals a ticket82 — Logs Are MAGIC — OpenWest 2017 — @genehack
  83. 83. the ticket id should be in the branch name 83 — Logs Are MAGIC — OpenWest 2017 — @genehack
  84. 84. along with something for the humans84 — Logs Are MAGIC — OpenWest 2017 — @genehack
  85. 85. put the number at the end of the branch name 85 — Logs Are MAGIC — OpenWest 2017 — @genehack
  86. 86. good: fix-login-864 86 — Logs Are MAGIC — OpenWest 2017 — @genehack
  87. 87. meh: fix-864 87 — Logs Are MAGIC — OpenWest 2017 — @genehack
  88. 88. bad: 864-crap 88 — Logs Are MAGIC — OpenWest 2017 — @genehack
  89. 89. !!!: foobar 89 — Logs Are MAGIC — OpenWest 2017 — @genehack
  90. 90. just. don’t. 90 — Logs Are MAGIC — OpenWest 2017 — @genehack
  91. 91. when merging include the branch name91 — Logs Are MAGIC — OpenWest 2017 — @genehack
  92. 92. default message works nicely 92 — Logs Are MAGIC — OpenWest 2017 — @genehack
  93. 93. Merge branch <name> 93 — Logs Are MAGIC — OpenWest 2017 — @genehack
  94. 94. you need to include the branch name here so that once the branch has been deleted, you'll still be able to tell what the branch name was maximal historical information94 — Logs Are MAGIC — OpenWest 2017 — @genehack
  95. 95. to review 95 — Logs Are MAGIC — OpenWest 2017 — @genehack
  96. 96. don’t squash 96 — Logs Are MAGIC — OpenWest 2017 — @genehack
  97. 97. don’t fast forward 97 — Logs Are MAGIC — OpenWest 2017 — @genehack
  98. 98. don’t rebase before merge 98 — Logs Are MAGIC — OpenWest 2017 — @genehack
  99. 99. don’t destroy your history 99 — Logs Are MAGIC — OpenWest 2017 — @genehack
  100. 100. use branches 100 — Logs Are MAGIC — OpenWest 2017 — @genehack
  101. 101. use a release branch 101 — Logs Are MAGIC — OpenWest 2017 — @genehack
  102. 102. use no-ff to make merge commits 102 — Logs Are MAGIC — OpenWest 2017 — @genehack
  103. 103. keep your repo clean 103 — Logs Are MAGIC — OpenWest 2017 — @genehack
  104. 104. let’s get more granular 104 — Logs Are MAGIC — OpenWest 2017 — @genehack
  105. 105. structuring individual commits105 — Logs Are MAGIC — OpenWest 2017 — @genehack
  106. 106. a commit equals one “change”106 — Logs Are MAGIC — OpenWest 2017 — @genehack
  107. 107. important: at each commit the software must work107 — Logs Are MAGIC — OpenWest 2017 — @genehack
  108. 108. who has heard of git bisect? who has used git bisect? <explain git bisect> git bisect 108 — Logs Are MAGIC — OpenWest 2017 — @genehack
  109. 109. when in doubt… smaller >> bigger 109 — Logs Are MAGIC — OpenWest 2017 — @genehack
  110. 110. whitespace & formatting 110 — Logs Are MAGIC — OpenWest 2017 — @genehack
  111. 111. always go in distinct commits111 — Logs Are MAGIC — OpenWest 2017 — @genehack
  112. 112. remember! 112 — Logs Are MAGIC — OpenWest 2017 — @genehack
  113. 113. revision is also a thing113 — Logs Are MAGIC — OpenWest 2017 — @genehack
  114. 114. what you eventually push114 — Logs Are MAGIC — OpenWest 2017 — @genehack
  115. 115. !=115 — Logs Are MAGIC — OpenWest 2017 — @genehack
  116. 116. your commits while working 116 — Logs Are MAGIC — OpenWest 2017 — @genehack
  117. 117. develop a habit of using checkpoint commits instead of the stash savepoints 117 — Logs Are MAGIC — OpenWest 2017 — @genehack
  118. 118. every working micro step 118 — Logs Are MAGIC — OpenWest 2017 — @genehack
  119. 119. single “change” 10-15 commits 119 — Logs Are MAGIC — OpenWest 2017 — @genehack
  120. 120. who has heard of the --patch option? who uses this? git add --patch 120 — Logs Are MAGIC — OpenWest 2017 — @genehack
  121. 121. git add -p 121 — Logs Are MAGIC — OpenWest 2017 — @genehack
  122. 122. git commit --amend 122 — Logs Are MAGIC — OpenWest 2017 — @genehack
  123. 123. editor support123 — Logs Are MAGIC — OpenWest 2017 — @genehack
  124. 124. magit fugitive github.atom.io124 — Logs Are MAGIC — OpenWest 2017 — @genehack
  125. 125. magit 125 — Logs Are MAGIC — OpenWest 2017 — @genehack
  126. 126. don’t push first drafts 126 — Logs Are MAGIC — OpenWest 2017 — @genehack
  127. 127. tell a story 127 — Logs Are MAGIC — OpenWest 2017 — @genehack
  128. 128. interactive rebasegit rebase -i 128 — Logs Are MAGIC — OpenWest 2017 — @genehack
  129. 129. sometimes may be useful to preserve dead ends 129 — Logs Are MAGIC — OpenWest 2017 — @genehack
  130. 130. photo credit https://pbs.twimg.com/media/ CPlr0tQWcAAZPjf.jpg ...as a warning for others 130 — Logs Are MAGIC — OpenWest 2017 — @genehack
  131. 131. commit messages131 — Logs Are MAGIC — OpenWest 2017 — @genehack
  132. 132. ticket numbers in the subject 132 — Logs Are MAGIC — OpenWest 2017 — @genehack
  133. 133. (at the end) 133 — Logs Are MAGIC — OpenWest 2017 — @genehack
  134. 134. less than 80 chars git's idea of a commit message was modeled on an email message the first line of the commit is the subject of the message. just like you can occasionally get away with sending an email message with only the subject line filled in, and a completely blank body, you occasionally have a git commit that doesn't need much more than that. a whitespace cleanup commit is a good example keep the subject short134 — Logs Are MAGIC — OpenWest 2017 — @genehack
  135. 135. most commits, however, deserve at least a paragraph of body text in the commit message. depending on exactly what work you di, what decisions you made, etc., influences how much you might want to put in there. good things to include may be benchmarkign work you did to decide what algorithm to use, other alternative approaches you considered -- basically anything that's going to help somebdody doing code review, or somebody staring at the commit in six months going WTAF commit message bodies135 — Logs Are MAGIC — OpenWest 2017 — @genehack
  136. 136. you can customize the template for the commit message 136 — Logs Are MAGIC — OpenWest 2017 — @genehack
  137. 137. if you get to this point, youʼre also going to want to script the repo setup process git config --local commit.template ./.template # edit .template to add whatever you want... 137 — Logs Are MAGIC — OpenWest 2017 — @genehack
  138. 138. subjects only commit message examples138 — Logs Are MAGIC — OpenWest 2017 — @genehack
  139. 139. that's 46 characters, by the way good: make login form use POST instead of GET [#864] 139 — Logs Are MAGIC — OpenWest 2017 — @genehack
  140. 140. meh: fixed form [#864] 140 — Logs Are MAGIC — OpenWest 2017 — @genehack
  141. 141. bad: 846 fix 141 — Logs Are MAGIC — OpenWest 2017 — @genehack
  142. 142. !!!: foo 142 — Logs Are MAGIC — OpenWest 2017 — @genehack
  143. 143. ( °□° 143 — Logs Are MAGIC — OpenWest 2017 — @genehack
  144. 144. this is why daddy drinks 144 — Logs Are MAGIC — OpenWest 2017 — @genehack
  145. 145. to review 145 — Logs Are MAGIC — OpenWest 2017 — @genehack
  146. 146. 1 commit == 1 change 146 — Logs Are MAGIC — OpenWest 2017 — @genehack
  147. 147. photo credit https://imgs.xkcd.com/comics/git_commit.png and https://xkcd.com/1296/ commit messages matter! 147 — Logs Are MAGIC — OpenWest 2017 — @genehack
  148. 148. when in doubt make it smaller 148 — Logs Are MAGIC — OpenWest 2017 — @genehack
  149. 149. (make the commit smaller NOTthe commit message) 149 — Logs Are MAGIC — OpenWest 2017 — @genehack
  150. 150. segregate formatting changes150 — Logs Are MAGIC — OpenWest 2017 — @genehack
  151. 151. use checkpoint commits as savepoints 151 — Logs Are MAGIC — OpenWest 2017 — @genehack
  152. 152. don’t push first drafts 152 — Logs Are MAGIC — OpenWest 2017 — @genehack
  153. 153. revise to tell a story153 — Logs Are MAGIC — OpenWest 2017 — @genehack
  154. 154. or at least make yourself look smart154 — Logs Are MAGIC — OpenWest 2017 — @genehack
  155. 155. using history better155 — Logs Are MAGIC — OpenWest 2017 — @genehack
  156. 156. jfri156 — Logs Are MAGIC — OpenWest 2017 — @genehack
  157. 157. <tell jesse story about reading history & talk inspiration> just friggin’ read it157 — Logs Are MAGIC — OpenWest 2017 — @genehack
  158. 158. ~/.gitconfig (again) 158 — Logs Are MAGIC — OpenWest 2017 — @genehack
  159. 159. color support159 — Logs Are MAGIC — OpenWest 2017 — @genehack
  160. 160. [color] branch = auto diff = auto grep = auto interactive = auto showbranch = auto status = auto ui = auto 160 — Logs Are MAGIC — OpenWest 2017 — @genehack
  161. 161. [color "status"] added = green bold changed = red bold untracked = cyan bold 161 — Logs Are MAGIC — OpenWest 2017 — @genehack
  162. 162. git diff 162 — Logs Are MAGIC — OpenWest 2017 — @genehack
  163. 163. git diff -w 163 — Logs Are MAGIC — OpenWest 2017 — @genehack
  164. 164. git diff --word-diff 164 — Logs Are MAGIC — OpenWest 2017 — @genehack
  165. 165. git diff --word-diff=color 165 — Logs Are MAGIC — OpenWest 2017 — @genehack
  166. 166. blame 166 — Logs Are MAGIC — OpenWest 2017 — @genehack
  167. 167. git blame 167 — Logs Are MAGIC — OpenWest 2017 — @genehack
  168. 168. -w ignores whitespace -M tracks lines moved within a file git blame -w -M 168 — Logs Are MAGIC — OpenWest 2017 — @genehack
  169. 169. who has run git blame and found out the thing that bugged them, they committed? [alias] praise = blame 169 — Logs Are MAGIC — OpenWest 2017 — @genehack
  170. 170. i will buy this tee shirt hashtag justsayin’ 170 — Logs Are MAGIC — OpenWest 2017 — @genehack
  171. 171. editorintegration171 — Logs Are MAGIC — OpenWest 2017 — @genehack
  172. 172. M-x git-blame-for-line 172 — Logs Are MAGIC — OpenWest 2017 — @genehack
  173. 173. git blame -L <line>,<line> <file> git log -L <line>,<line>:<file> 173 — Logs Are MAGIC — OpenWest 2017 — @genehack
  174. 174. git blame -L 1,1 index.html 174 — Logs Are MAGIC — OpenWest 2017 — @genehack
  175. 175. git blame -L 10,50 index.html 175 — Logs Are MAGIC — OpenWest 2017 — @genehack
  176. 176. git blame -L 20,+10 index.html 176 — Logs Are MAGIC — OpenWest 2017 — @genehack
  177. 177. git log -L 1,1:index.html 177 — Logs Are MAGIC — OpenWest 2017 — @genehack
  178. 178. git log -L 10,50:index.html 178 — Logs Are MAGIC — OpenWest 2017 — @genehack
  179. 179. git log -L 20,+10:index.html 179 — Logs Are MAGIC — OpenWest 2017 — @genehack
  180. 180. git log -S <string> 180 — Logs Are MAGIC — OpenWest 2017 — @genehack
  181. 181. git lg 181 — Logs Are MAGIC — OpenWest 2017 — @genehack
  182. 182. log --graph --abbrev-commit --date=relative --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' 182 — Logs Are MAGIC — OpenWest 2017 — @genehack
  183. 183. 183 — Logs Are MAGIC — OpenWest 2017 — @genehack
  184. 184. --graph 184 — Logs Are MAGIC — OpenWest 2017 — @genehack
  185. 185. --abbrev-commit 185 — Logs Are MAGIC — OpenWest 2017 — @genehack
  186. 186. --date=relative 186 — Logs Are MAGIC — OpenWest 2017 — @genehack
  187. 187. SHA in red, branch name (if any) in yellow, commit subject, date, author --pretty=format: '%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' 187 — Logs Are MAGIC — OpenWest 2017 — @genehack
  188. 188. 188 — Logs Are MAGIC — OpenWest 2017 — @genehack
  189. 189. takeaways! 189 — Logs Are MAGIC — OpenWest 2017 — @genehack
  190. 190. history is important190 — Logs Are MAGIC — OpenWest 2017 — @genehack
  191. 191. it’s probably worth more of your time191 — Logs Are MAGIC — OpenWest 2017 — @genehack
  192. 192. both creating it and using it 192 — Logs Are MAGIC — OpenWest 2017 — @genehack
  193. 193. don’t just stop when the software works193 — Logs Are MAGIC — OpenWest 2017 — @genehack
  194. 194. software development is hard194 — Logs Are MAGIC — OpenWest 2017 — @genehack
  195. 195. be kind to others195 — Logs Are MAGIC — OpenWest 2017 — @genehack
  196. 196. be kind to your future self196 — Logs Are MAGIC — OpenWest 2017 — @genehack
  197. 197. thank you! 197 — Logs Are MAGIC — OpenWest 2017 — @genehack
  198. 198. 198 — Logs Are MAGIC — OpenWest 2017 — @genehack
  199. 199. GIMME YR TALKS Oct 6-7 CFP OPEN NOW! seagl.org 199 — Logs Are MAGIC — OpenWest 2017 — @genehack
  200. 200. please give me feedbackhttps://joind.in/talk/0f066 200 — Logs Are MAGIC — OpenWest 2017 — @genehack
  201. 201. questions? FEEDBACK → https://joind.in/talk/0f066 201 — Logs Are MAGIC — OpenWest 2017 — @genehack
  202. 202. 202 — Logs Are MAGIC — OpenWest 2017 — @genehack

×