Lesson 01 · GitHub platform · issues

Issues

The unit of work on GitHub that isn't a commit. What it's for, how it links to your PRs, and the one syntax trick that closes it automatically.

You know commits and PRs cold (see the git course). An issue is different: it's not a change to code, it's a tracked conversation — a bug report, a task, a question — that lives on GitHub, not in your git history at all. It exists so work can be planned and discussed before a commit exists to fix it.

Anatomy of an issue

Title
One line, searchable. "Login button misaligned on mobile", not "bug".
Body
Markdown. Steps to reproduce, task checklist (- [ ] item renders as a live checkbox), screenshots.
Labels
Tags for filtering: bugenhancementdocumentation and any custom ones a repo defines.
Assignee
Who's doing it. Doesn't have to be you — issues coordinate a team, not just remind yourself.
Milestone
Groups issues under a target ("v1.0 release") with a progress bar. Optional, useful once a repo has enough open issues to need grouping.

Anyone with repo access can open one — it needs no code, no branch, no permission beyond "can comment here." That's the point: it's the cheapest way to record "this needs doing" before anyone has written a line to do it.

The one trick: closing an issue from a commit

Write a specific keyword + issue number in a commit message or PR description, and merging that PR closes the issue automatically — no separate click.

git commit -m "Fix mobile nav overflow

Fixes #12"
KeywordEffect when merged into the default branch
Fixes #12, Closes #12, Resolves #12Issue #12 closes automatically
plain #12Just links — commit shows up in the issue's timeline, issue stays open
Why this matters more than it looks This is the actual link between "planned work" (issue) and "the change that did it" (commit/PR). Open the issue later and you see every commit and PR that referenced it — a free audit trail with zero extra effort, as long as you remember the keyword.

Works the same in a PR description, not just a commit message — and it's the more common place to put it, since a PR is usually reviewed before merge while a raw commit message isn't.

Your win — try it for real, right now On this repo on GitHub: open a new issue (Issues tab → New issue) describing something small and real you'd actually want changed here. Add a label. Then, next time you commit a fix for it, add Fixes #<number> to the message and push — watch the issue close itself when the change lands on main.

Go deeper

Primary source — read this one: GitHub Docs — Linking a pull request to an issue. Covers every closing keyword and the edge cases (multiple issues, cross-repo linking).

Then do it for real: GitHub Skills — Communicate using Markdown, or just use the real issue you opened above.