Git is the tool on your Mac. GitHub is a server in the cloud, plus a website on top of it. Once you see them as two separate things, everything else clicks.
The names look almost identical, which is why this confuses everyone at first. Git (no "Hub") is a program that lives on your Mac. It tracks changes to files in a folder and stores a history of every snapshot you take. It works perfectly fine without an internet connection.
GitHub is a company. They run a server that holds a copy of your project, and they wrap a website around it so you can see files, leave comments, invite collaborators, and review changes from a browser. GitHub uses git under the hood — it's a hosting service for git projects.
Git is Microsoft Word. GitHub is OneDrive.
Word still works without OneDrive — you can edit documents on your laptop forever. OneDrive adds sharing, sync, permissions, and a web UI on top. Same with git and GitHub: git works fine alone; GitHub adds the cloud-shared, browser-accessible, multi-person layer.
A commit is git's word for "save point." Every time you say "commit," git takes a snapshot of every file in the project right now, attaches a message you type, and gives the snapshot a unique 40-character ID called a SHA. The SHA is the fingerprint — no two commits ever share one.
You normally see only the first 7 characters of the SHA. It's enough to be unique. Your AL repo's very first commit was ab39fcd with the message "init: _agentic-lab monorepo bootstrap (AL-2.1)". That's a moment in time, frozen — you can return to exactly that state at any future point.
A SHA is not just a label — it's derived from the snapshot itself. If you change one byte of one file in that commit, the SHA changes too. That's how git knows nobody has tampered with history. Any time you see ab39fcd referenced anywhere, you can trust it points to exactly that snapshot.
A branch is a name that points to one specific commit. As you add new commits, the branch label automatically moves forward to the newest one. The default branch in every new repo is called main. It's the one place that represents "the official version" — what everyone agrees is the real project.
You can make new branches off of main to try things without disturbing it. A branch named fix/typo-in-readme can hold experimental commits that nobody else sees yet. When you're happy, you ask for those commits to be folded into main. When you're not, you delete the branch — main was never affected.
Your Mac copy and GitHub's copy don't sync automatically. Each side moves on its own until you tell git to ship updates. git push uploads your local commits to GitHub. git pull downloads commits from GitHub to your local copy.
If you're the only person on the repo, you mostly push. The moment someone else (say, Josh) starts pushing too, you'll pull before you push to grab their changes first — otherwise git stops you with a "your branch is behind" warning and refuses to let you overwrite their work.
Any rule about "what can happen to main" — like "no force-pushes" or "must have a review first" — is enforced when you push. The GitHub server is where the rules live. If GitHub allows the push, your change becomes part of the official history. If GitHub rejects it (because of a rule), your local copy is untouched but the change never reaches the shared version. We'll dig into those rules in Lesson 2.
You already have all of this running. The AL-2.1 dispatch set it up on 2026-05-18. Here's where everything lives:
~/lab/projects/_agentic-lab/https://github.com/lovebuilt/agentic-labmainab39fcd — init: _agentic-lab monorepo bootstrap8545268 — AL-2.1: closeout — STATUS flip + SL courtesy noteFrom here on, every lesson is about the rules you can put on that GitHub copy — what to allow, what to block, who gets to do what. That's where the "branch protection" and "GitHub Pro" conversations start.
main is the default "official" branch.git push uploads your commits to GitHub; git pull downloads GitHub's commits to you.main (like "no force-pushes") is enforced server-side, at the moment of push. We cover the rules in Lesson 2.~/lab/projects/_agentic-lab/ locally and github.com/lovebuilt/agentic-lab remotely.