Glossary of Terms
Comprehensive glossary: Git, GitHub, open source, and accessibility terminology.
Listen
Transcript
Alex: Welcome back. This episode is a companion to the glossary, so the goal is simple: make GitHub words feel less mysterious when you hear them in a workshop, an issue, or a pull request.
Jamie: I love a glossary episode because half the stress of open source is hearing a familiar word used in a very specific way. Like, I know what a branch is in a tree. Git has other plans.
Alex: Exactly. The glossary is there for quick lookup across the whole workshop. Terms are grouped by topic, and there is also an alphabetical quick reference near the end when you already know the word you need.
Jamie: And the navigation tips matter. If you use a screen reader, headings are your friend here. Jump by headings, open the elements list, and type a few letters of the term.
Alex: If you use magnification, the term headings and the alphabetical table are useful because each row stands on its own. And anyone can use Control-F in the browser to search directly for a word like remote, stash, or ARIA.
Jamie: Let's also say pronunciations as we go, because some of these terms are awkward when you only read them.
Alex: Yes. Git is pronounced with a hard G, like get with an i sound. Repo is REE-poh, short for repository. Org is just org, short for organization. And PR is usually spoken as the letters P R, meaning pull request.
Jamie: Good. My shoulders just dropped a little.
Alex: A repository, often shortened to repo, is the project container. It holds the files, folders, documentation, and the full history of changes.
Jamie: So it is more than a folder. It is a folder with memory.
Alex: Right. A repository on GitHub has an address like github.com, then the owner name, then the repo name. If the owner is a group account, that group is called an organization, or org.
Jamie: So in microsoft slash vscode, microsoft is the organization and vscode is the repository.
Alex: Exactly. A fork is your personal copy of someone else's repository on GitHub. You use a fork when you do not have permission to write directly to the original project, but you still want to propose changes.
Jamie: And clone is different from fork, right? That pair always trips people up.
Alex: Fork means a copy under your GitHub account. Clone means a copy on your computer, where you can work in VS Code or another editor. A common workflow is fork the project on GitHub, then clone your fork to your computer.
Jamie: Where do remotes fit into that?
Alex: A remote is a named connection from your local Git repository to a repository hosted somewhere else, usually GitHub. The remote named origin usually points to the repo you cloned from. If you cloned your fork, origin points to your fork.
Jamie: And upstream is the original project you forked from.
Alex: Yes. You can see remotes with `git remote -v`. You can add the original project as upstream with a command like `git remote add upstream https://github.com/original-owner/repo.git`.
Jamie: So local means on my computer, remote means hosted elsewhere, origin is usually my GitHub copy, and upstream is the original project.
Alex: That is the usual setup. You may also hear downstream, which means something based on another project. A fork is downstream from the original because it receives changes from that original source.
Jamie: Before we leave the project container words, what is dot gitignore?
Alex: `.gitignore` is a special file that tells Git not to track certain files. You use it for temporary operating system files, build outputs like `dist/` or `build/`, dependency folders like `node_modules/`, editor folders like `.vscode/`, and secret files like `.env`.
Jamie: Important warning there: dot gitignore does not magically erase something that was already committed.
Alex: Correct. It only ignores untracked files. If a file is already tracked by Git, you remove it from tracking with `git rm --cached filename`, then add the pattern to `.gitignore`, then commit that change.
Alex: A branch is a separate line of development inside a repository. The main branch, usually called `main`, is often the stable version of the project.
Jamie: And sometimes older projects use `master`, so if I hear that, it is also a branch name, not a different tool.
Alex: Right. Common branch names include `main`, sometimes `develop`, and then names like `feature/add-search`, `fix/broken-button`, or `docs/update-readme`. The name should help people understand the purpose of the work.
Jamie: Then a commit is the saved checkpoint.
Alex: Yes. A commit records a snapshot of changes, a message, the author, a timestamp, and a unique identifier called a SHA hash. SHA is often pronounced shah, though spelling S H A is also common.
Jamie: Commit messages have a style too, don't they?
Alex: They do. A good message says what the change does, often in the imperative mood: `Fix typo in README`, not `Fixed typo` or `Fixing typo`. Longer commit messages can include a short title, a blank line, and then a body explaining why the change was made.
Jamie: And a diff is how we inspect the change.
Alex: A diff, short for difference, shows what changed between two versions. Added lines are usually shown with a plus sign, removed lines with a minus sign, and unchanged lines appear as context.
Jamie: That is what I am reading on the Files Changed tab of a pull request.
Alex: Exactly. Push, pull, and fetch are the movement words. Push sends your local commits up to a remote. Fetch downloads remote changes so you can inspect them. Pull fetches changes and then integrates them into your current branch.
Jamie: So fetch is the cautious look, and pull is the update that changes my branch.
Alex: An issue is a discussion item in a GitHub repository. People use issues to report bugs, request features, ask questions, discuss ideas, and track work.
Jamie: Issues also have numbers, like number 42, and they can have labels, assignees, milestones, and comments.
Alex: Yes. A pull request, or PR, is a proposal to merge changes from one branch into another. It includes the branch information, the diff, a description of what changed and why, and a place for discussion.
Jamie: The name still sounds a little odd. It means I am asking maintainers to pull my changes into their project.
Alex: That is exactly it. Review is the feedback process on a PR. A reviewer can leave a comment, approve the change, or request changes before it can be merged.
Jamie: And good review is not just thumbs up or thumbs down. It should be kind, specific, and useful.
Alex: Yes. You may also see a draft PR. Draft means the work is visible, but the author is signaling that it is not ready for final review yet.
Jamie: That is useful in learning settings too. A review-ready draft or a clear contribution plan can be real evidence that someone understands the workflow, even before a maintainer merges anything.
Alex: Merging is combining changes from one branch into another. GitHub projects may use a merge commit, squash and merge, or rebase and merge, depending on how they want the history to look.
Jamie: And then there is the famous merge conflict.
Alex: A merge conflict happens when two branches changed the same part of the same file in incompatible ways. Git pauses because it cannot decide which version should win.
Jamie: Those conflict markers are the lines with less-than signs, equals signs, and greater-than signs.
Alex: Yes. You resolve the file by choosing the final content, removing the markers, saving the file, and committing the resolution. It feels intimidating the first time, but it is a normal collaboration moment.
Jamie: Let's talk about the people words, because GitHub is not just commands.
Alex: A maintainer is someone with responsibility for a repository, often with write or admin access. A contributor is anyone who helps, whether through code, docs, issues, design, testing, accessibility feedback, or review.
Jamie: And a collaborator?
Alex: A collaborator is someone who has been granted access to work directly in a repository, usually more access than a typical outside contributor. Triage is the work of reviewing new issues, adding labels, asking clarifying questions, and routing work to the right place.
Jamie: Labels are those colored tags, like bug, documentation, good first issue, or accessibility.
Alex: Right. A milestone groups issues and pull requests around a goal, such as a release or a workshop deadline. GitHub Projects can organize work in boards, tables, and views so a team can track progress.
Jamie: Community files are part of that collaboration picture too.
Alex: They are. A README explains what the project is. A LICENSE tells people what they are allowed to do with the code. CONTRIBUTING explains how to help. A code of conduct sets expectations for behavior.
Jamie: And templates can guide issues and pull requests so people do not start from a blank box.
Alex: Exactly. You may also see SECURITY for reporting vulnerabilities, SUPPORT for help channels, GitHub Discussions for broader community conversations, a wiki for multi-page documentation, and Gists for small shareable snippets.
Jamie: What about the quick slang pile?
Alex: A few common ones: LGTM means looks good to me. WIP means work in progress. CI means continuous integration, where automated checks run on changes. CD can mean continuous delivery or continuous deployment, depending on the project.
Alex: Now for the Git terms that sound scarier than they usually are. HEAD, in all caps, is Git's pointer to your current branch or commit.
Jamie: Detached HEAD is the one that makes people wonder if they broke everything.
Alex: A detached HEAD means you are looking at a specific commit instead of working on a branch. It can happen when you check out an old commit, a tag, or a commit hash directly.
Jamie: What does that mean for my work?
Alex: You can look around safely, but new commits made there may be hard to find unless you create a branch. The fix is usually to create a branch at that point with `git switch -c branch-name`, or switch back to an existing branch if you were only inspecting history.
Jamie: Stash is another useful safety word.
Alex: Stash temporarily saves uncommitted changes so you can switch tasks or update your branch without committing unfinished work. A common flow is `git stash`, do the other task, then `git stash pop` to bring the changes back.
Jamie: And if I want to see what I stashed?
Alex: Use `git stash list`. You can use `git stash apply` to reapply without removing the stash, or `git stash drop` when you are sure you no longer need it.
Jamie: Rebase is where people get nervous.
Alex: Rebase replays your commits on top of another branch. Merge preserves the branch history and creates a merge point. Rebase can make history more linear, but it rewrites commit history.
Jamie: So when is rebase reasonable?
Alex: It is usually reasonable on your own local branch before you share it, or when your team explicitly uses that workflow. Do not rebase shared branches casually, because rewriting history can disrupt other people's work.
Jamie: And cherry-pick?
Alex: Cherry-pick copies one specific commit from one branch onto another. It is useful when you need one fix without bringing over every other change from that branch.
Jamie: Force push sounds like the red button.
Alex: It deserves caution. Force push overwrites the remote branch with your local history. It may be needed after a rebase on your own branch, but it is not okay on shared branches unless the team has agreed.
Jamie: There is a safer version, right?
Alex: Use `--force-with-lease` instead of plain force push when you can. It checks whether someone else updated the remote branch before overwriting it, which helps prevent accidental damage.
Alex: A SHA or hash is the unique identifier for a commit or Git object. You will often see a short version, like seven characters, in GitHub links and commit lists.
Jamie: A tag is a name attached to a specific commit, often for a version.
Alex: Yes. A release builds on a tag and adds release notes, downloadable files, or other packaged information for users.
Jamie: Then GitHub Actions is the automation system.
Alex: Right. An Action runs workflows, and a workflow is an automated process defined in the repository. CI/CD workflows might run tests, check formatting, build documentation, or deploy a site.
Jamie: And status checks are the pass or fail results that show up on a pull request.
Alex: Exactly. A status check might say the tests passed, the build failed, or an accessibility check needs attention. Maintainers often require important checks to pass before merging.
Jamie: What is a webhook?
Alex: A webhook sends information to another service when something happens on GitHub, like a push, issue comment, or pull request event. It is a way to connect GitHub activity to other tools.
Jamie: And profile?
Alex: Your GitHub profile is your public identity on GitHub. It can show your repositories, contributions, bio, links, and sometimes a profile README.
Jamie: The glossary also needs the accessibility words we keep using in this series.
Alex: A screen reader is software that reads interface content aloud or sends it to a braille display. NVDA, JAWS, VoiceOver, and TalkBack are common examples.
Jamie: Landmarks and headings are navigation structure.
Alex: Yes. Headings organize content by level, like heading level 1 for the page title and heading level 2 for major areas. Landmarks identify regions such as main content, navigation, search, and footer.
Jamie: ARIA is pronounced AIR-ee-uh, right?
Alex: Right. ARIA stands for Accessible Rich Internet Applications. It can add accessibility information to custom interface elements, but native HTML should come first whenever it can do the job.
Jamie: Focus is the current place my keyboard or assistive technology is interacting with.
Alex: Exactly. Tab order is the path focus follows as you press Tab. A good tab order matches the visual and logical reading order, does not trap people, and makes every interactive control reachable.
Jamie: So when we review a page, we are not only asking whether it looks good. We are asking whether the structure and keyboard path make sense.
Alex: Yes, and whether names, roles, labels, error messages, and instructions are available to assistive technology. That is where careful issues and clear reproduction notes really help maintainers.
Alex: Finally, the agent vocabulary. GitHub Copilot is an AI coding assistant. Depending on the environment, it may suggest code, answer questions, help explain errors, or help draft changes.
Jamie: And an agent is a little more active than a simple suggestion box.
Alex: Yes. An agent can follow instructions, use tools, inspect files, and carry out a task within limits. You still review the output, test it, and decide what belongs in the project.
Jamie: Slash commands are the short commands that start with a slash, like a shortcut in a chat or coding assistant.
Alex: Right. A prompt is the request you give the tool. An instruction file is a project-level guide that tells the assistant how to behave, such as coding style, testing expectations, accessibility requirements, or documentation tone.
Jamie: This connects to the later accessibility agent work too.
Alex: It does. The Accessibility Agents collection is a living catalog, so it grows over time. Challenge 15 is browse-first, and learners do not need to fork that repository just to complete the discovery challenge.
Jamie: Completing that discovery challenge unlocks the Capstone Project and the structured bonus path, right?
Alex: Yes. Challenge 16 is titled Capstone Project. It can involve a contribution to Accessibility Agents, GLOW, or another meaningful repository, and review-ready drafts or contribution plans can count as valid evidence of completion.
Jamie: And Day 1 contributions happen somewhere else.
Alex: They happen in the Learning Room repository, which is provisioned for each learner. That is where the issue, branch, commit, pull request, and merge workflow is practiced end to end.
Jamie: Let's end with a quick pronunciation pass for the words people may only have read.
Alex: Git has a hard G. GitHub is Git-hub. Repo is REE-poh. Org is org. PR is P R. SHA can be shah or S H A.
Jamie: More please.
Alex: ARIA is AIR-ee-uh. CI/CD is C I slash C D. YAML is often YAM-ul. `.gitignore` is usually spoken as dot gitignore. `HEAD` is head, even though it is written in capital letters.
Jamie: And when a term gets fuzzy, do not try to memorize every definition at once.
Alex: Look it up, read the nearby related terms, and connect it to the workflow you are doing right now. If a fact might have changed, use the official GitHub documentation, release notes, and linked references as the current source of truth.
Jamie: That makes the glossary less like homework and more like a map you keep beside you.
Alex: Exactly. The win is not knowing every word before you start. It is being able to recover your place when a new term appears, then keep contributing with confidence.
Workshop Content
Companion Podcast and Transcript
Use audio and transcript companions to review concepts in a conversational format.
Glossary of Terms
Companion audio: this episode reinforces key ideas and may not be a word-for-word reading of this page.
Open audio file (external) Full transcript source (external)
Transcript preview
Alex: Welcome back. This episode is a companion to the glossary, so the goal is simple: make GitHub words feel less mysterious when you hear them in a workshop, an issue, or a pull request.
Jamie: I love a glossary episode because half the stress of open source is hearing a familiar word used in a very specific way. Like, I know what a branch is in a tree. Git has other plans.
Alex: Exactly. The glossary is there for quick lookup across the whole workshop. Terms are grouped by topic, and there is also an alphabetical quick reference near the end when you already know the word you need.
Jamie: And the navigation tips matter. If you use a screen reader, headings are your friend here. Jump by headings, open the elements list, and type a few letters of the term.
Appendix A: GitHub Concepts & 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.
Reference companion to: Chapter 02: Understanding GitHub | Also relevant: all chapters
Authoritative source: GitHub Docs: Glossary
Every Term You Need for Open Source Contribution
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.
Learning Cards: Navigating the Glossary
Screen reader users
- Press H to jump between term headings (h3 level) within each category section
- Use the Elements List (NVDA+F7 or Insert+F6) to see all terms at once and type a few letters to filter
- Jump to "Alphabetical Quick Reference" at the bottom for a flat A-Z lookup table
Low vision users
- Each term is a bold h3 heading -- increase zoom and scan headings to browse terms quickly
- The alphabetical table at the bottom works well at high zoom since each row is self-contained
- Use Ctrl+F in your browser to search for any term by name
Sighted users
- Terms are grouped by category (Parts 1-6) -- scan the bold headings to find the right group
- Scroll to the bottom for the alphabetical quick reference table if you know the term name
- Use Ctrl+F to jump directly to any term on the page
Part 1: The Building Blocks
Repository (Repo)
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)
Organization (Org)
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.
Fork
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.
Remote
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 GitHubupstream- 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.
To see your remotes
git remote -v
To add a remote
git remote add upstream https://github.com/original-owner/repo.git
Origin
origin 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
.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.
Why use .gitignore?
- 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/)
Example .gitignore
# 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 filename
Then add it to .gitignore and commit the change.
Clone
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.
Branch
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.
Common branch names
main- the primary, stable branchdevelop- integration branch (not all projects have this)feature/my-new-thing- convention for feature branchesfix/broken-button- convention for bug fix branchesdocs/update-readme- convention for documentation-only branches
Commit
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
Diff
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.
Part 2: Collaboration Workflow
Issue
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.
Pull Request (PR)
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
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.
Merge
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 |
Merge Conflict
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
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
Label
Labels are colored tags applied to issues and PRs to categorize them. Common labels:
bug- something isn't workingenhancement- new feature or requestdocumentation- documentation-only changegood first issue- good for newcomers (look for this when finding your first contribution!)help wanted- maintainers want community helpaccessibility- accessibility-related
Milestone
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.
Project (GitHub Projects)
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.
Part 3: People and Roles
Maintainer
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.
Contributor
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.
Triage
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.
Collaborator
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).
Part 4: Common Abbreviations and Slang
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 |
Part 5: Technical GitHub Concepts
HEAD
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 changes
Detached HEAD
A "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.
Why it happens
git checkout a1b2c3d # Checking out a commit directly
What this means
- Any commits you make won't belong to any branch
- If you switch branches, those commits become "orphaned"
How to fix it
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-name
Screen reader note: Git will warn you verbosely when entering detached HEAD state. Read the guidance carefully.
Stash
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.
Common workflow
# 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
Stash commands
git stash- save changesgit stash list- see what's stashedgit stash pop- restore and remove from stashgit stash apply- restore but keep in stashgit 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."
Rebase
Rebasing is an alternative to merging. Instead of creating a merge commit, rebase moves (replays) your commits on top of another branch.
Merge
main: A---B---C
\
feature: D---E---F
\
result: A---B---C-------M (merge commit)
Rebase
main: A---B---C
feature: D'---E'---F' (commits "replayed" on top of C)
When to use rebase
- Keep a linear project history
- Clean up your branch before submitting a PR
- Incorporate upstream changes into your feature branch
When NOT to rebase
- Shared branches (never rebase
mainor public branches) - After pushing to GitHub (unless you're comfortable force pushing)
Basic rebase workflow
git checkout feature-branch
git rebase main
# Fix any conflicts
git push --force-with-lease # See Force Push below
Screen reader note: Rebase conflicts are resolved the same way as merge conflicts (edit file, remove markers, git add, git rebase --continue).
Cherry-Pick
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
When to use
- 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.
Fetch vs Pull
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 origin
git 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
When to use fetch
- 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
When to use pull
- 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 Push
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.
When force push is okay
- Your own feature branch that no one else is working on
- After rebasing to clean up history before merging a PR
When force push is NEVER okay
- The
mainbranch - Shared branches where others have based work on your commits
- Public branches with collaborators
Safer alternative: --force-with-lease
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.
Why force push is needed after rebase
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.
SHA / Hash
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.
Tag / Release
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.
Actions / Workflow / CI/CD
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.
Status Check
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.
Webhook
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.
GitHub Discussions
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.
Profile
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
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.
Part 6: Community Files
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 |
Learning Cards: Alphabetical Quick Reference
Screen reader users
- Press T to jump to the table, then use Ctrl+Alt+Arrow keys to navigate rows and columns
- Each row has two cells: Term and Definition -- column headers are announced on first entry
- For longer definitions, the table keeps them concise; see the full entry above for details
Low vision users
- This table is designed for quick lookups -- each row fits on a single line at most zoom levels
- If the table wraps awkwardly, try reducing zoom slightly or switching to a wider window
- Bold term names in the left column create a visible scan line
Sighted users
- Scan the left column alphabetically to find your term quickly
- Definitions here are one-liners -- look up the full entry in Parts 1-6 above for examples and commands
- Use Ctrl+F and type the term name to jump directly to it
Alphabetical Quick Reference
| 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 |
Next: Appendix B: Screen Reader Cheat Sheet
Teaching chapter: Chapter 02: Understanding GitHub
Authoritative Sources
Use these official references when you need the current source of truth for facts in this chapter.
Section-Level Source Map
Use this map to verify facts for each major section in this file.
- Every Term You Need for Open Source Contribution: GitHub Docs, home, GitHub Changelog
- Part 1: The Building Blocks: GitHub Docs, home, GitHub Changelog
- Part 2: Collaboration Workflow: GitHub Docs, home, GitHub Changelog, Workflow syntax for GitHub Actions, Secure use reference for GitHub Actions, GitHub Actions changelog
- Part 3: People and Roles: GitHub Docs, home, GitHub Changelog
- Part 4: Common Abbreviations and Slang: GitHub Docs, home, GitHub Changelog
- Part 5: Technical GitHub Concepts: GitHub Docs, home, GitHub Changelog, About Git, GitHub flow, About pull requests
- Stash commands: GitHub Docs, home, GitHub Changelog
- Part 6: Community Files: GitHub Docs, home, GitHub Changelog, GitHub Discussions docs, GitHub Gists docs
- Alphabetical Quick Reference: GitHub Docs, home, GitHub Changelog