-
Notifications
You must be signed in to change notification settings - Fork 5
appendix a glossary
Listen to Episode 18: Glossary of Terms - a conversational audio overview of this chapter. Listen before reading to preview the concepts, or after to reinforce what you learned.
This glossary is your reference for the entire two-day workshop. When you hear a term you don't recognize - check here first. Terms are grouped by category and also sorted alphabetically at the end.
A repository is the container for an entire project. It holds all the project's files, folders, documentation, and the complete history of every change ever made. Think of it as a project folder that has a time machine built in - you can see every version of every file going back to the beginning.
A repository lives on GitHub at an address like: https://github.com/owner/repo-name
Related terms: remote repository (the one on GitHub), local repository (a copy on your computer), upstream (the original repo), fork (your personal copy)
An organization is a group account on GitHub that multiple people can belong to. Open source projects typically live inside an organization rather than under a personal account. For example: https://github.com/microsoft/vscode - here microsoft is the organization and vscode is the repository.
A fork is a personal copy of someone else's repository, living in your own GitHub account. When you fork a repo, you get all its files and history. Changes you make to your fork do not automatically affect the original. To propose your changes to the original project, you submit a pull request.
Why fork? You do not have write access to most open source repos. Forking lets you work freely and then propose changes.
A remote is a connection to a repository hosted elsewhere (usually on GitHub). Your local Git repository can have multiple remotes. The most common remotes are:
-
origin- your fork on GitHub -
upstream- the original repository you forked from
When you run git push origin main, you're pushing your local main branch to the remote named origin.
git remote -vgit remote add upstream https://github.com/original-owner/repo.gitorigin is the default name Git gives to the remote repository you cloned from. When you clone your fork, origin points to your fork on GitHub.
Commands like git push and git pull default to using origin unless you specify otherwise.
.gitignore is a special file in the root of your repository that tells Git which files or folders to ignore - meaning Git will not track or commit them.
- Prevent committing temporary files (
.DS_Store,Thumbs.db) - Ignore build outputs (
dist/,build/,node_modules/) - Keep secrets out of Git (
.envfiles, API keys, credentials) - Avoid committing IDE-specific files (
.vscode/,.idea/)
# Dependencies
node_modules/
vendor/
# Environment variables
.env
.env.local
# Build outputs
dist/
build/
*.log
# OS files
.DS_Store
Thumbs.db
# IDE
.vscode/
.idea/
Important: .gitignore only ignores untracked files. If you already committed a file, you must remove it from Git's tracking first:
git rm --cached filenameThen add it to .gitignore and commit the change.
Cloning copies a repository from GitHub to your local computer so you can work with it in VS Code or your preferred editor. When you clone, you get all the files and the complete history.
git clone https://github.com/your-username/repo-name.git
Fork vs Clone: Fork = your copy on GitHub. Clone = a copy on your computer. You usually clone your fork.
A branch is a separate line of development inside a repository. The main branch (often called main or master) holds the stable, released version of the project. When you want to add a feature or fix a bug, you create a new branch so your work doesn't affect main until it's ready.
Think of branches like parallel timelines - each branch is its own version of the project that can evolve independently and be merged back together later.
-
main- the primary, stable branch -
develop- integration branch (not all projects have this) -
feature/my-new-thing- convention for feature branches -
fix/broken-button- convention for bug fix branches -
docs/update-readme- convention for documentation-only branches
A commit is a saved snapshot of your changes at a moment in time. Every commit has:
- A message describing what changed and why
- A unique SHA hash (a fingerprint like
a1b2c3d) - The author and timestamp
- The changes (additions and deletions to files)
Good commit messages are in the imperative mood: "Fix typo in README" not "Fixed typo" or "Fixing typo."
Example of a well-written commit message:
Fix broken link in accessibility guide
The link to the NVDA download page was using an outdated URL.
Updated to the current direct download page.
Fixes #42
A diff (short for difference) shows what changed between two versions of a file. Lines that were added are shown in green (with a + prefix). Lines that were removed are shown in red (with a - prefix). Lines that are unchanged are shown in grey for context.
Reading diffs is one of the core skills for code review. When you view a Pull Request's "Files Changed" tab, you are reading a diff.
An issue is a discussion item in a GitHub repository. Issues are used for:
- Reporting bugs
- Requesting features or improvements
- Asking questions
- Discussing ideas
- Tracking work items
Every issue gets a sequential number (like #42) and can have labels, assignees, milestones, and comments. Issues are the starting point for most contributions - it's best practice to open or find an issue before making code changes.
A pull request is a proposal to merge changes from one branch into another. When you have finished working on your fork or feature branch, you open a PR to say "here is my work - please review it and consider merging it."
A PR shows:
- Which branch you want to merge into which target branch
- The diff (all changes you made)
- A description of what you changed and why
- Discussion threads and reviews from others
The name "pull request" means you are requesting that the maintainers pull your changes into their project.
Code review is the process of one or more collaborators reading and providing feedback on a PR before it is merged. Reviewers can:
- Comment - leave a note on a line (not a formal verdict)
- Approve - signal that they are happy with the changes
- Request Changes - indicate that specific things need to be addressed before merging
Good code reviews are kind, specific, and constructive.
Merging is combining changes from one branch into another. When a PR is approved, a maintainer merges it. There are three merge strategies:
| Strategy | What It Does | When Used |
|---|---|---|
| Merge commit | Creates a new commit recording the merge | Default on most projects |
| Squash and merge | Combines all PR commits into one commit | Keeping history clean |
| Rebase and merge | Replays commits on top of target branch | Linear history projects |
A merge conflict happens when two branches have both changed the same part of the same file in different ways. Git doesn't know which version to keep, so it pauses and asks you to resolve it manually.
Conflict markers look like this in a file:
<<<<<<< HEAD
The current content on your branch
=======
The incoming content from the other branch
>>>>>>> feature/other-branch
You resolve a conflict by editing the file to have the correct final content, removing the conflict markers, and then committing.
See Merge Conflicts Guide for step-by-step instructions.
Upstream refers to the original repository that you forked from. When the upstream project has new changes that you want to bring into your fork, you "sync" your fork with upstream.
Your Fork → upstream → Original Repo
Your changes flow this way: Original Repo ← Pull Request ← Your Fork
Labels are colored tags applied to issues and PRs to categorize them. Common labels:
-
bug- something isn't working -
enhancement- new feature or request -
documentation- documentation-only change -
good first issue- good for newcomers (look for this when finding your first contribution!) -
help wanted- maintainers want community help -
accessibility- accessibility-related
A milestone groups issues and PRs toward a goal or deadline. For example: "v2.0 Release" or "Hackathon Day 1." Milestones show progress as a percentage of closed versus open items.
A GitHub Project is a flexible board for tracking work. It can show issues and PRs in table view, board view (kanban), or roadmap view. Projects are especially useful for hackathon-style coordination.
A maintainer is someone with write or admin access to a repository. Maintainers review PRs, triage issues, manage releases, and make decisions about the project's direction. Most open source projects have between one and five core maintainers.
Anyone who contributes to an open source project is a contributor. Contributing includes code, documentation, design, testing, translation, issue triage, and community support. You do not need commit access to contribute.
Triaging issues means reviewing new issues to categorize them, add labels, assign them, close duplicates, and communicate with the reporter. Triage is an important contribution that doesn't require coding skills.
A collaborator is someone who has been explicitly granted write access to a repository. Collaborators can commit directly to the repo without forking (though good practice is still to use branches and PRs).
These abbreviations appear frequently in GitHub comments, PR descriptions, and commit messages:
| Term | Stands For | Meaning |
|---|---|---|
| LGTM | Looks Good To Me | Informal approval - "I reviewed it and it looks correct" |
| WIP | Work In Progress | This PR is not ready for review yet |
| nit | Nitpick | A minor, optional suggestion - "not a blocker" |
| RFC | Request For Comments | Seeking broad feedback on an idea or approach |
| PTAL | Please Take A Look | Asking someone to review something |
| IMO / IMHO | In My (Humble) Opinion | Softening a suggestion |
| AFAICT | As Far As I Can Tell | "Based on what I can see..." |
| TIL | Today I Learned | Sharing a discovery |
| FYI | For Your Information | Sharing information, no action needed |
| EOD / EOW | End of Day / Week | Deadline |
| Closes #42 | - | When merged, this PR closes issue #42 (automatic linking) |
| Fixes #42 | - | Same as Closes - use when the PR fixes a bug |
| Resolves #42 | - | Same as Closes - general resolution |
| Refs #42 | References #42 | Links to the issue without closing it |
| cc @username | Carbon copy | Notifying someone without requiring their action |
| /cc | Same as cc | Alternative form |
| stale | - | An issue or PR with no recent activity |
| WONTFIX | - | The project won't address this issue (it's not a bug, or by design) |
| upstream | - | The original repo you forked from |
| downstream | - | A fork or project that depends on this one |
| breaking change | - | A change that will break existing functionality for users |
HEAD is Git's way of saying "where you are right now." It's a pointer to the current commit on the current branch.
- When you're on
main,HEADpoints to the latest commit onmain - When you switch branches,
HEADmoves to that branch -
HEAD^orHEAD~1means "the commit before HEAD"
You'll see HEAD referenced in commands like:
git reset HEAD~1 # Undo the last commit
git diff HEAD # Show uncommitted changesA "detached HEAD" occurs when you check out a specific commit instead of a branch. You're no longer "on" a branch - just looking at a snapshot in time.
git checkout a1b2c3d # Checking out a commit directly- Any commits you make won't belong to any branch
- If you switch branches, those commits become "orphaned"
If you made commits in detached HEAD state and want to keep them:
git branch new-branch-name # Creates a branch from your current position
git checkout new-branch-nameScreen reader note: Git will warn you verbosely when entering detached HEAD state. Read the guidance carefully.
git stash temporarily saves your uncommitted changes and reverts your working directory to a clean state. It's useful when you need to switch branches but aren't ready to commit.
# You're working on branch A
git stash # Save your changes temporarily
git checkout main # Switch to main
# Do something on main..
git checkout branch-a # Switch back
git stash pop # Restore your changes-
git stash- save changes -
git stash list- see what's stashed -
git stash pop- restore and remove from stash -
git stash apply- restore but keep in stash -
git stash drop- delete a stash
Use case: "I need to quickly switch branches to check something, but I'm in the middle of work I'm not ready to commit."
Rebasing is an alternative to merging. Instead of creating a merge commit, rebase moves (replays) your commits on top of another branch.
main: A---B---C
\
feature: D---E---F
\
result: A---B---C-------M (merge commit)
main: A---B---C
feature: D'---E'---F' (commits "replayed" on top of C)
- Keep a linear project history
- Clean up your branch before submitting a PR
- Incorporate upstream changes into your feature branch
- Shared branches (never rebase
mainor public branches) - After pushing to GitHub (unless you're comfortable force pushing)
git checkout feature-branch
git rebase main
# Fix any conflicts
git push --force-with-lease # See Force Push belowScreen reader note: Rebase conflicts are resolved the same way as merge conflicts (edit file, remove markers, git add, git rebase --continue).
Cherry-picking applies a single commit from one branch onto another. It's like copy-pasting a commit.
Use case: You made a bug fix on the wrong branch and want to apply it to main without merging the whole branch.
git checkout main
git cherry-pick a1b2c3d # Apply commit a1b2c3d to main- Extract a single fix from a larger feature branch
- Backport a bug fix to an older release branch
- Undo a commit on one branch but keep it on another
Warning: Cherry-picking duplicates commits (creates a new commit with the same changes). Avoid cherry-picking commits that are part of an active feature branch - it causes confusion.
git fetch downloads changes from a remote repository but doesn't merge them into your current branch. It updates your local copy of remote branches (like origin/main or upstream/main) without touching your working files.
git fetch origin # Download updates from origingit pull = git fetch + git merge. It downloads changes and immediately merges them into your current branch.
git pull origin main # Fetch + merge origin/main into current branch- You want to see what changed without committing to merging
- You want to review changes before integrating them
- You're syncing upstream and want to inspect first
- You know you want the latest changes merged immediately
- You're working alone on a branch
Best practice for collaboration: Use fetch first, review with git log origin/main, then decide to merge or rebase.
Force pushing (git push --force or git push -f) overwrites the remote branch with your local version, replacing its history. This is dangerous because it can delete commits that others have based work on.
- Your own feature branch that no one else is working on
- After rebasing to clean up history before merging a PR
- The
mainbranch - Shared branches where others have based work on your commits
- Public branches with collaborators
git push --force-with-lease origin feature-branch--force-with-lease only force pushes if no one else has pushed to the remote branch since you last fetched. If someone pushed changes, the command fails and warns you.
When you rebase, Git rewrites commit history. The remote branch and your local branch now have conflicting histories. A normal git push fails. Force pushing resolves this by saying "trust my version."
Rule of thumb: If you're not sure whether you need to force push, you probably shouldn't.
Every commit, file, and tree in Git is identified by a SHA hash - a 40-character string of letters and numbers (e.g., a1b2c3d4e5f6...). You will see shortened versions like a1b2c3d in the GitHub UI. These are unique fingerprints.
A tag marks a specific commit as significant - usually a version release like v1.0.0. Tags are permanent references (unlike branches, which move with each new commit). GitHub Releases are built on top of tags and can include release notes and downloadable files.
GitHub Actions is an automation platform built into GitHub. Workflows are automated scripts (written in YAML) that run in response to events - like a PR being opened or code being pushed. CI/CD stands for Continuous Integration / Continuous Deployment.
In practice: when you open a PR, you will often see automated checks run (tests, linting, accessibility checks). These are GitHub Actions. See GitHub Actions & Workflows for a full explanation.
A status check is the result of an automated test or workflow run on a PR. Status checks show as:
- Green checkmark - all checks passed
- Red X - one or more checks failed
- Yellow dot - checks are still running
Maintainers often require status checks to pass before merging.
A webhook is an automated notification that GitHub sends to another service when something happens (a push, a PR opened, etc.). Webhooks power integrations with tools like Slack, project management systems, and CI services. As a contributor, you typically don't configure webhooks - they are set up by maintainers.
Discussions are a threaded forum built into GitHub, separate from Issues. They are used for open-ended conversation, Q&A, and community announcements. Not all projects use Discussions - some prefer issues or external forums.
Your GitHub profile is your public identity. It shows your name, bio, location, repositories, contribution activity (the green squares), and pinned projects. Your profile URL is https://github.com/your-username.
GitHub Copilot is an AI-powered coding assistant. It suggests code, documentation, and commit messages. In this workshop, we use Copilot to help write issue descriptions, PR descriptions, documentation, and code. See GitHub Copilot for the full walkthrough.
Every healthy open source project has these files in the root of the repository:
| File | Purpose |
|---|---|
README.md |
Project overview, how to use it, how to contribute |
CONTRIBUTING.md |
How to contribute - setup, workflow, PR guidelines |
CODE_OF_CONDUCT.md |
Community standards and expectations |
LICENSE |
Legal terms for using the software |
SECURITY.md |
How to report security vulnerabilities responsibly |
CHANGELOG.md |
History of notable changes by version |
.github/ISSUE_TEMPLATE/ |
Templates for bug reports, feature requests, etc. |
.github/PULL_REQUEST_TEMPLATE.md |
Template for PR descriptions |
| Term | Definition |
|---|---|
| .gitignore | File specifying which files Git should ignore |
| Assignee | Person responsible for an issue or PR |
| Base branch | The branch a PR merges INTO |
| Branch | A parallel line of development |
| Cherry-pick | Apply a specific commit from one branch to another |
| CI/CD | Continuous Integration / Continuous Deployment |
| Clone | Copy a repo to your local computer |
| Code review | Reviewing PR changes before merging |
| Codespaces | Cloud-based VS Code development environment |
| Collaborator | Someone with write access to a repo |
| Comment | Discussion note on an issue, PR, or specific line |
| Commit | A saved snapshot of changes |
| Compare branch | The branch a PR merges FROM |
| Contributor | Anyone who contributes to a project |
| Default branch | The main branch (usually named "main") |
| Detached HEAD | Checking out a specific commit instead of a branch |
| Diff | The visual difference between two file versions |
| Discussions | Threaded forum space for Q&A and community conversation |
| Draft PR | A PR not yet ready for review |
| Feature preview | Opt-in GitHub UI experiments |
| Fetch | Download remote changes without merging |
| Force push | Overwrite remote branch history (use with caution) |
| Fork | Your personal copy of another repo |
| Git | The version control system GitHub is built on |
| GitHub Pages | Free static site hosting from a GitHub repository |
| Gist | Shareable code snippet or small file collection |
| Hash / SHA | Unique identifier for a commit or object |
| HEAD | Pointer to your current commit/branch |
| Issue | A discussion item (bug, feature, question) |
| Label | Colored tag for categorizing issues/PRs |
| Maintainer | Person with repo write/admin access |
| Merge | Combining changes from one branch into another |
| Merge conflict | When two branches changed the same content differently |
| Milestone | A goal grouping related issues/PRs |
| Organization | A group GitHub account |
| Origin | Default name for the remote you cloned from (your fork) |
| PR | Pull Request |
| Pull | Fetch changes and merge them (git pull) |
| Pull Request | Proposal to merge your changes |
| README | The main project documentation file |
| Rebase | Replay commits on top of another branch |
| Release | A versioned snapshot with notes and downloads |
| Remote | A connection to a repository hosted elsewhere |
| Repository | A project container with all files and history |
| Review | Formal feedback on a PR (approve/comment/request changes) |
| SHA | Unique hash identifier |
| Squash merge | Combining all PR commits into one |
| Stash | Temporarily save uncommitted changes |
| Status check | Automated pass/fail result shown on a PR |
| Tag | A permanent named reference to a specific commit |
| Triage | Reviewing and categorizing new issues |
| Upstream | The original repo you forked from |
| Wiki | Multi-page documentation space in a repository |
| Tag | A permanent named reference to a specific commit |
| Triage | Reviewing and categorizing new issues |
| Upstream | The original repo you forked from |
Appendix B - look up any term here at any point during the workshop. Return to: Day 1 Agenda | Understanding GitHub's Web Structure See also: Screen Reader Cheat Sheet