A relaxed tour of the helpful features that live around your code on GitHub, and when to use each one.
Nearly every repo on GitHub has a tab called Issues. (Owners can switch it off, and your own forks start with it off, but you will meet it almost everywhere.) It is a shared to-do list that lives right next to the code. Anyone can pin a card to it: a bug ("the login button is broken on phones"), an idea ("dark mode would be lovely"), or just a question ("how do I run this?").
Each card gets its own number, like #42. Underneath it, a discussion thread where people can reply, paste screenshots, and figure things out together. Cards can wear little colored labels too, like bug or good first issue.
Here is the magic habit. When you open a pull request that fixes issue #42, write the words Fixes #42 in the PR description. The moment the PR merges, GitHub closes the issue for you. The to-do list cleans itself. Teams that do this never have to ask "wait, did anyone handle that bug?"
When you want to change a project, ask yourself one question: "Am I part of this project's team?"
If yes: you and your teammates share ONE repo. You make a branch, a bookmark in the shared album, take some photos, push, and open a pull request. That is exactly what you practiced in the last two lessons. Nothing new to learn.
If no: say you find a lovely open source project and spot a typo. You cannot stick bookmarks in a stranger's album: you do not have permission to push there. So GitHub offers a different move. With one click it makes you your OWN full copy of the repo, under your account. Photos, sticky notes, the whole history. You branch and commit in your copy, where you cannot possibly break anything. Then you open a pull request FROM your copy BACK to the original: "I made these changes over here, want them?"
Q. A teammate on the same repo wants to add a feature. They should...
When you visit a repo on GitHub, one file gets star treatment: README.md. GitHub renders it right on the repo's home page, like a welcome sign. A good README answers three questions: What is this project? How do I run it? How can I help?
The .md stands for Markdown: plain text with a few light symbols for formatting. Here is the entire crash course, thirty seconds, that is all it takes:
# My Project ← a big heading This app tracks your reading list. It is **free** and easy to run. ← ** makes bold - step one: install it ← - makes a bullet - step two: enjoy See [our website](https://example.com) ← a link ``` npm install && npm run dev ← code in its own box ```
By the way: every lesson in this course is built on the very same idea. Plain text, light formatting. Once you notice Markdown, you will see it everywhere: GitHub, chat apps, note apps, all of it.
Some files should never go in the album. A .gitignore is a plain text file at the top of your repo. Each line is a pattern, and any file that matches becomes invisible to git. It never lands in the shopping basket, never gets photographed, never travels to GitHub.
One catch: .gitignore only hides files git is not already tracking. If a file was photographed before you ignored it, git keeps tracking it until you tell it to stop with git rm --cached <file>.
Three kinds of things belong on the list:
| What | Examples | Why |
|---|---|---|
| Build junk | node_modules/, .next/ | thousands of files your tools can rebuild anytime |
| OS noise | .DS_Store | little files your Mac sprinkles around |
| Secrets | .env, API keys, passwords | above all else: these must never be photographed |
# .gitignore: things git should never photograph
node_modules/
.next/
.DS_Store
.env
This is not theoretical. Your own real project keeps its database and email keys in a file called .env, and its .gitignore lists .env for exactly this reason. The secrets stay on your machine, never in the album, never on GitHub.
In your playground folder, create a fake secret and watch .gitignore hide it from git.
cd /tmp/git-playground echo "SECRET_KEY=12345" > .env git status # .env shows up as untracked: one careless "git add ." away from the album. Not good. echo ".env" >> .gitignore # >> appends to the file (or creates it), so any lines already there survive git status # .env has vanished from the list. git now politely pretends it does not exist. # .gitignore itself appears instead: commit that, it is safe and meant to be shared.
Q. You accidentally committed a password 10 commits ago, and you just deleted it in a new commit. Safe now?
Three more buttons you will bump into on every repo page. One line each:
| Button | What it really is |
|---|---|
| ⭐ Star | a bookmark plus applause: saves the repo to your list and tells the owner you like it |
| 👁 Watch | a subscription: GitHub notifies you when new issues and pull requests appear |
| 🏷 Releases | named, downloadable snapshots of the project at a proud moment, like v1.0 or v2.0 |
None of these change any code. They are just the noticeboard, the doorbell, and the trophy shelf of the workshop.