Pushing just one piece.

In a monorepo, how to commit only what you want — leaving WIP in sibling folders untouched. Plus how to see version history for a single subfolder.

Concept 01 — The staging area

Git has a third place most people miss.

Beginners usually think git has two places: your files on disk and commits. Actually there are three:

1. Working
your edits
games/duck-hunt/index.html
games/duck-hunt/script.js
games/pepper-popper/sketch.html
portal/index.html
2. Staging
about to commit
empty — you choose what goes here with git add
3. History
committed forever
your previous commits live here, untouched until the next commit lands

This middle lane is the staging area (a.k.a. "the index"). It exists so you can pick which changes go into the next commit. When you run git add <path>, you're moving stuff from workingstaging. When you run git commit, you take whatever's in staging and stamp it into history.

Concept 02 — Selective commits in action

Commit duck-hunt, leave pepper-popper alone.

Here's the exact scenario you asked about: you're working in games/duck-hunt/, you're done with a clean change there, but you also have WIP changes in games/pepper-popper/ that you're not ready to share. How do you push just duck-hunt?

# 1. See what's changed and not staged git status # modified: games/duck-hunt/index.html # modified: games/duck-hunt/script.js # modified: games/pepper-popper/sketch.html # modified: portal/index.html # 2. Stage only the duck-hunt folder (or specific files) git add games/duck-hunt/ # whole subfolder # OR pick exact files: git add games/duck-hunt/index.html games/duck-hunt/script.js # 3. Verify only duck-hunt is staged git status # Changes to be committed: # modified: games/duck-hunt/index.html # modified: games/duck-hunt/script.js # Changes not staged: # modified: games/pepper-popper/sketch.html # modified: portal/index.html # 4. Commit the staged stuff git commit -m "duck-hunt: fix scoreboard alignment" # 5. Push to GitHub git push

The WIP in pepper-popper/ and portal/ stays untouched on your Mac — uncommitted, unpushed, untouched. Only the duck-hunt changes go live.

The mental shortcut

git add . means "stage everything that's changed." Useful when you ARE ready to commit it all. git add <specific-path> is the surgical version. Get comfortable with the surgical one — it's the difference between "I accidentally committed my half-finished side-quest" and "clean commit history."

Concept 03 — git status is your situational awareness

Run git status constantly.

git status tells you everything: what's modified, what's staged, what's untracked. It's the most-run command in any seasoned dev's life. Run it before git add, after git add, before git commit. It's free to run, never destructive, always informative.

git status # On branch dev # Your branch is up to date with 'origin/dev'. # # Changes to be committed: ← these are STAGED, going in next commit # modified: games/duck-hunt/index.html # # Changes not staged: ← these are WIP, won't go anywhere # modified: games/pepper-popper/sketch.html # # Untracked files: ← brand-new files git doesn't know about yet # games/duck-hunt/sounds/quack.mp3
Companion command — git diff

git diff shows what actually changed inside the modified files. Run it when you're not sure what you edited. git diff --staged shows what's in the staging area (about to commit). Together with git status, these are your three eyes.

Concept 04 — Independent history per subfolder

Each subfolder has its own commit story.

You asked whether playground's top-level portal could show its own version history independent of the sub-games. Yes — git can show you the commit history of any path, not just the whole repo. The history is one continuous stream, but git lets you filter it by directory:

# All commits, the whole repo git log --oneline # Only commits that touched games/duck-hunt/ git log --oneline -- games/duck-hunt/ # Only commits that touched portal/ git log --oneline -- portal/ # The last 5 commits that touched games/, with messages and dates git log -5 --pretty=format:"%h %ad %s" --date=short -- games/

The -- (two dashes alone) separates "git args" from "path filters." Anything after it is a filesystem path or glob pattern.

A "What's new" panel, automatically generated

Want playground's portal to show "what sub-game just got updated"? Run git log -5 --pretty=format:"%h %s" -- games/ as part of your build step, write the output into a JSON file, and have the portal's HTML read it. Build-time generation. No runtime database needed.

Concept 05 — Tagging subfolder releases

Bookmark specific moments with tags.

A tag is a stickier sticky-note than a branch — it points at a specific commit and doesn't move. Devs use tags to mark releases: v1.0, v1.1, etc.

In a monorepo, you can prefix tags with subfolder names so each game's release history stays distinct:

# Tag a release of duck-hunt specifically git tag duck-hunt/v1.0 -m "duck-hunt first stable release" git push --tags # Later, tag a portal release git tag portal/v1.0 -m "portal layout v1" # See all duck-hunt tags git tag -l "duck-hunt/*" duck-hunt/v1.0 duck-hunt/v1.1 duck-hunt/v1.2
Don't over-engineer this

Tags are useful when you want to say "duck-hunt is at version 1.2" or roll back to a specific past state. For experimental playground stuff, you may never need them. Pull tags out of the toolbox when you genuinely have releases to mark — not before.

Concept 06 — Anti-crowding GitHub, redux

One more pattern: the README catalog.

From Lesson 3 you know about pinned repos, topic tags, the lovebuilt org, and archiving. There's one more pattern worth introducing: the catalog README.

The idea: one of your repos is explicitly the "table of contents" for the rest. Its README links to every other project of yours, organized by category, with short descriptions and live URLs. You make this the pinned-first repo on your GitHub profile. Visitors land there and orient themselves before drilling in.

Bonus pattern — README as homepage

If your catalog repo is named lovebuilt (matching your username/org), GitHub shows its README on your profile page. Make a beautifully-formatted catalog and it becomes your public-facing developer homepage. Free. Zero hosting. Always up to date with your actual work.

✦ Lesson 5 recap

What you now control…