Elements of a Grammar
Git has 160+ commands. Some are plumbing (hash-object,
write-tree); some are porcelain (commit, log), built on top of
the underlying plumbing commands.
Some porcelain operations are combinations of others. For example,
pull is fetch + merge/rebase. cherry-pick is diff +
apply + commit. A rebase is basically a series of cherry-picks
followed by a reset.
Here’s a challenge. What basic porcelain commands would suffice to build an entire versioning system?
Think about it.