# HG changeset patch # User Steve Losh # Date 1365430612 14400 # Node ID bb7f34f82be5769239d691b6b7e78e53d837dd7a # Parent 3b0fb0a3ea527682f867741744db23c06bda1bca git. diff -r 3b0fb0a3ea52 -r bb7f34f82be5 content/blog/2013/04/git-koans.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/blog/2013/04/git-koans.html Mon Apr 08 10:16:52 2013 -0400 @@ -0,0 +1,167 @@ + {% extends "_post.html" %} + + {% hyde + title: "Git Koans" + snip: "The path to enlightenment is long and arduous." + created: 2013-04-08 10:00:00 + flattr: true + %} + + {% block article %} + +Inspired by [Vim Koans][]. + +[Vim Koans]: http://blog.sanctum.geek.nz/vim-koans/ + +[TOC] + +Silence +------- + +A Python programmer handed her `~/.gitconfig` to Master Git. Among the many +lines were the following: + + :::text + [alias] + ; Explicit is better than implicit. If we want to merge + ; we should do so ourselves. + pull = pull --ff-only + +Master Git nodded. "`git pull origin master`," said the programmer. + +Master Git pulled down the latest changes on `master` and automatically merged +them with the programmer's changes. + +"But Master Git, did I not say to only fast-forward in my configuration?!" she +cried. + +Master Git looked at her, nodded, and said nothing. + +"Then why did you not warn me of a problem with my configuration?" she asked. + +Master Git replied: "there was no problem." + +Months later the programmer was reading `git --help config` for a different +reason and found enlightenment. + +One Thing Well +-------------- + +A UNIX programmer was working in the cubicle farms. As she saw Master Git +traveling down the path, she ran to meet him. + +"It is an honor to meet you, Master Git!" she said. "I have been studying the +UNIX way of designing programs that each do one thing well. Surely I can learn +much from you." + +"Surely," replied Master Git. + +"How should I change to a different branch?" asked the programmer. + +"Use `git checkout`." + +"And how should I create a branch?" + +"Use `git checkout`." + +"And how should I update the contents of a single file in my working directory, +without involving branches at all?" + +"Use `git checkout`." + +After this third answer, the programmer was enlightened. + +Only the Gods +------------- + +The great historian was trying to unravel the intricacies of an incorrect merge +that had happened many months ago. He made a pilgrimage to Master Git to ask +for his help. + +"Master Git," said the historian, "what is the nature of history?" + +"History is immutable. To rewrite it later is to tamper with the very fabric of +existence." + +The historian nodded, then asked: "Is that why rebasing commits that have been +pushed is discouraged?" + +"Indeed," said Master Git. + +"Splendid!" exclaimed the historian. "I have a historical record of a merge +commit with two parents. How can I find out which branch each parent was +originally made on?" + +"History is ephemeral," replied Master Git, "the knowledge you seek can be +answered only by the gods." + +The historian hung his head as enlightenment crushed down upon him. + +The Hobgoblin +------------- + +A novice was learning at the feet of Master Git. At the end of the lesson he +looked through his notes and said, "Master, I have a few questions. May I ask +them?" + +Master Git nodded. + +"How can I view a list of *all* tags?" + +"`git tag`", replied Master Git. + +"How can I view a list of *all* remotes?" + +"`git remote -v`", replied Master Git. + +"How can I view a list of *all* branches?" + +"`git branch -a`", replied Master Git. + +"And how can I view the current branch?" + +"`git rev-parse --abbrev-ref HEAD`", replied Master Git. + +"How can I delete a remote?" + +"`git remote rm`", replied Master Git. + +"And how can I delete a branch?" + +"`git branch -d`", replied Master Git. + +The novice thought for a few moments, then asked: "Surely some of these could be +made more consistent, so as to be easier to remember in the heat of coding?" + +Master Git snapped his fingers. A hobgoblin entered the room and ate the novice +alive. In the afterlife, the novice was enlightened. + +The Long and Short of It +------------------------ + +Master Git and a novice were walking along a bridge. + +The novice, wanting to partake of Master Git's vast knowledge, said: +"`git branch --help`". + +Master Git sat down and lectured her on the seven forms of `git branch`, and +their many options. + +They resumed walking. A few minutes later they encountered an experienced +developer traveling in the opposite direction. He bowed to Master Git and said +"`git branch -h`". Master Git tersely informed him of the most common `git +branch` options. The developer thanked him and continued on his way. + +"Master," said the novice, "what is the nature of long and short options for +commands? I thought they were equivalent, but when that developer used `-h` you +said something different than when I said `--help`." + +"Perspective is everything," answered the Master. + +The novice was puzzled. She decided to experiment and said "`git -h branch`". + +Master Git turned and threw himself off the railing, falling to his death on the +rocks below. + +Upon seeing this, the novice was enlightened. +