Commit, Merge, Branch, Tag - WHAT?
Once commits are understood as snapshots with ancestry and branches as movable pointers, much of Git's intimidating vocabulary becomes easier to navigate.
Once commits are understood as snapshots with ancestry and branches as movable pointers, much of Git's intimidating vocabulary becomes easier to navigate.
Remotes move commits between repositories, while fetch, merge, pull, and push provide a safe workflow for sharing work without silently losing remote history.
Long-lived work, quick fixes, and older builds do not need to compete for one working directory. Worktrees keep each checkout independent while sharing the same local Git history.
Commit often without interrupting your flow, squash checkpoints into meaningful chapters later, and use the reflog when a commit pointer gets lost.
Before review, commits can be freely reshaped. Once others depend on the branch, and especially after integration, history should be treated as increasingly permanent.
A stray newline or formatting fix looks harmless until it lands inside the wrong commit. The fix is not about code, it's about keeping the branch readable for you and everyone else.
Developing software often requires exploration, leaving dead ends, cleanup commits, and experiments on its way. Git lets you keep the finished work and allows you to rewrite the path into something readable.