Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Elements of a Grammar

Git has 160+ commands. Some are plumbing operations, such as hash-object and write-tree. Some are porcelain commands, such as commit and log. These are built on top of the plumbing commands.

Some porcelain operations could be thought of as combinations of other porcelain operations. For example: pull is clearly fetch followed by merge/rebase. cherry-pick is diff + apply + commit. I like to think of rebase as a series of cherry-picks followed by a reset.

Here's a challenge. Setting plumbing aside (we never want to break the abstraction), what basic commands would suffice to build an entire versioning system?

Think about it, write them down.