GH-900 GitHub Foundations Study Guide¶
Independent AI-assisted resource — SOURCES + OBJECTIVES CHECKED; HUMAN REVIEW PENDING. Objective coverage, citations, volatility labels, links, and exam-integrity compliance were checked on October 28, 2026; this is not a guarantee that the guide is error-free or current after that date. See the sources-and-objectives record. The official GH-900 blueprint is authoritative.
Study guide at a glance
Start here
Prerequisites: No formal prerequisite; basic computer and web familiarity is enough.
Official objective domains
- Understand Git and GitHub basics25–30%
- Work with GitHub repositories10–15%
- Collaborate using GitHub10–15%
- Apply modern development practices10–15%
- Manage projects with GitHub5–10%
- Understand privacy, security, and administration10–15%
- Explore the GitHub community5–10%
The active-reading range uses 90–130 words per minute for technical material. Labs, troubleshooting, note-taking, spaced review, and prerequisite gaps add time; it is not a total preparation promise.
Current baseline: Skills at a glance as of January 2026
Upcoming blueprint change: None announced on the official study guide as of October 28, 2026.
Official source: GH-900 study guide
Primary certification alignment: GitHub Foundations (GH-900)
Secondary benefit: The GitHub platform knowledge assumed by GitHub Copilot (GH-300)
VERIFY CURRENT: Recheck pricing, plan names, feature availability, previews, UI paths, quotas, retention, and command syntax in the linked official documentation. Those details are synchronized only to the
last_verifieddate above and can change without an exam-blueprint revision.
Purpose of this guide¶
GitHub makes more sense when you stop treating it as a collection of screens and learn it as a system:
- Git records the history of files.
- GitHub repositories store and share Git history.
- Issues, pull requests, Discussions, and Projects coordinate people and work.
- Actions and security features check and automate the work.
- Teams, permissions, rulesets, and policies govern what people and tools may do.
- Copilot works inside that system; it does not replace it.
This guide covers all seven domains in the current GH-900 study guide, but it is written to help you use GitHub rather than merely recognize exam terms.
Editor naming check — September 27, 2026: GitHub's browser-editor documentation now calls the experience VS Code for the Web from GitHub. Earlier
github.devterminology in this guide refers to that browser editing experience. Keep its capabilities distinct from a Codespaces compute environment; a documentation title change does not establish an exam-objective change.
How to use this guide¶
Read the relevant part, reproduce its example in a disposable repository, and explain the associated distinctions in your own words. New learners can follow the parts in order; experienced learners can use the domain map and readiness checklist to target gaps.
About related items: A
Related item:callout adds prerequisite, operational, architectural, or adjacent context that makes the current topic easier to understand. It is useful supporting knowledge, not a claim that the item appears verbatim in the published exam objectives.
Current GH-900 domain map¶
| Domain | Exam weight | Where it appears here |
|---|---|---|
| Understand Git and GitHub basics | 25–30% | Parts 1–4 |
| Work with GitHub repositories | 10–15% | Parts 5–6 |
| Collaborate using GitHub | 10–15% | Parts 7–8 |
| Apply modern development practices | 10–15% | Parts 9–11 |
| Manage projects with GitHub | 5–10% | Part 12 |
| Understand privacy, security, and administration | 10–15% | Parts 13–15 |
| Explore the GitHub community | 5–10% | Part 16 |
The percentages come from the official GH-900 study guide. GitHub changes frequently, so recheck that page shortly before taking the exam.
Part 1: Version control, Git, and GitHub¶
Primary references for this part: About Git, the Git reference manual, and Pro Git.
1.1 What version control solves¶
Version control records changes to files over time. It lets a team answer:
- Who changed this line?
- Why was the change made?
- What did the project look like last Tuesday?
- Which changes belong to a particular feature?
- Can two people work in parallel?
- Can we review a change before it reaches production?
- Can we safely undo a bad change?
Without version control, teams create copies such as final, final-v2, and final-really-final. Those copies do not explain the relationship between changes and are difficult to merge. Version control gives every accepted change an identity and a place in history.
Centralized versus distributed version control¶
| Model | How it works | Important implication |
|---|---|---|
| Centralized | The authoritative history resides on a central server | Many operations require access to that server |
| Distributed | Every clone normally contains the complete repository history | You can commit, inspect history, and create branches locally |
Git is distributed. GitHub is a hosted collaboration platform built around Git repositories.
Related item: Distributed history improves resilience and offline work, but a clone is not a complete backup of GitHub metadata such as issues, pull requests, Actions settings, teams, and policies. Repository history and platform configuration need different continuity plans.
Git is the version-control system. GitHub is a service that hosts Git repositories and adds collaboration, automation, security, and administration.
You can use Git without GitHub, and GitHub also supports tasks through its website and APIs. Most real workflows use both.
1.2 Git’s snapshot model¶
Git thinks primarily in snapshots, not as a sequence of independently saved files. A commit represents the state of the tracked project at one point in time, plus metadata such as:
- Author and committer
- Timestamp
- Commit message
- Parent commit or commits
- A cryptographic object identifier
If a file did not change, Git can efficiently refer to existing content rather than store a wasteful new copy.
The four places to keep straight¶
| Place | Meaning |
|---|---|
| Working tree | The files currently on disk that you edit |
| Staging area/index | The exact changes selected for the next commit |
| Local repository | Commits and history stored in the local .git directory |
| Remote repository | A Git repository elsewhere, commonly on GitHub |
The normal path is:
These are separate decisions. Saving a file does not stage it. Staging does not commit it. Committing locally does not send it to GitHub.
1.3 Core Git vocabulary¶
| Term | Practical meaning |
|---|---|
| Repository | Project files plus their Git history |
| Commit | An identified snapshot with a message and parent history |
| Branch | A movable name pointing to a line of commits |
| Default branch | The repository’s primary branch, commonly main |
| Tag | A named reference, usually used to mark a fixed release |
HEAD |
The currently checked-out commit, normally through a branch |
| Remote | A named reference to another Git repository |
origin |
Conventional name for the remote from which you cloned |
upstream |
Conventional name for the original repository behind your fork |
| Clone | A local copy of a repository and its history |
| Fork | A GitHub-side repository copy under a different account |
| Merge | Combine histories, sometimes creating a merge commit |
| Rebase | Replay commits onto a different base |
| Conflict | A change Git cannot combine automatically |
| SHA/object ID | Identifier derived from Git object content |
| Tracked file | A file Git knows about |
| Untracked file | A file present in the working tree but not yet tracked |
Branches are lightweight pointers¶
A branch is not a full copy of every file. It is a movable reference to a commit. When you commit on a branch, the branch pointer advances. This makes branching fast and encourages short-lived branches for isolated work.
A commit identifier is not a version number¶
A Git object ID identifies content and history. A human-friendly release such as v2.1.0 is normally represented with a tag. GitHub can then build a release around the tag and add release notes and downloadable assets.
Part 2: Install, configure, and authenticate¶
Primary references for this part: Set up Git, about authentication to GitHub, and caching GitHub credentials.
2.1 Your main ways to work with GitHub¶
| Tool | Best for |
|---|---|
| GitHub.com | Repository settings, issues, pull requests, reviews, Projects, administration |
| Git command line | Precise local version-control work and automation |
GitHub CLI (gh) |
GitHub operations such as creating PRs, issues, and releases from a terminal |
| GitHub Desktop | Visual local Git workflow without memorizing commands |
| VS Code Git integration | Everyday source control inside the editor |
github.dev |
Lightweight browser editing; no full compute environment |
| GitHub Codespaces | Cloud-hosted development environment with compute and terminal access |
| GitHub Mobile | Notifications, issues, PR review, and lightweight collaboration |
These are interfaces to overlapping capabilities. For example, you can create a branch on GitHub.com, with Git, in Desktop, or in VS Code.
2.2 Basic local configuration¶
After installing Git, establish the identity recorded in new commits:
git config --global user.name "Chris Example"
git config --global user.email "chris@example.com"
git config --global init.defaultBranch main
git config --global --list
--global applies settings to your user. Without it, a configuration can be repository-specific. Git’s commit email should correspond to an email associated with your GitHub account if you want GitHub to attribute the commit to you. GitHub also supports a privacy-protecting noreply email address.
2.3 Authentication is not commit identity¶
These are different:
user.nameanduser.emailidentify the author recorded in a commit.- Authentication proves to GitHub that you may read or write a repository.
Common authentication choices¶
| Method | Typical use | Notes |
|---|---|---|
| HTTPS with Git Credential Manager | Convenient interactive Git use | Credentials are stored through a secure credential helper |
| SSH key | Frequent command-line use | Public key is registered with GitHub; private key stays with you |
| GitHub CLI authentication | GitHub CLI and optional Git credential setup | gh auth login guides configuration |
| Personal access token | API, automation, or HTTPS situations | Prefer fine-grained tokens and least privilege where supported |
| GitHub App token | Application and service integration | Installation-scoped and generally preferable to a shared user token for apps |
GITHUB_TOKEN |
Actions workflow access | Temporary repository-scoped token whose permissions should be minimized |
A normal GitHub account password is not used as the password for Git operations over HTTPS.
HTTPS versus SSH¶
Neither is universally “more professional.” Choose based on your environment:
- HTTPS is easy through Git Credential Manager and often works through corporate networks.
- SSH is convenient once keys are configured and avoids repeated interactive credential prompts.
- Organizations may impose authentication policies, SAML SSO requirements, or network restrictions.
Useful checks:
Never put tokens, passwords, client secrets, private keys, or cloud credentials in a repository.
Related item: SSH proves control of a private key; HTTPS credential helpers and tokens use a different authentication path. Both still rely on GitHub authorization, organization policy, and repository permissions to decide what the authenticated identity may do.
Part 3: The essential Git workflow¶
Primary references for this part: GitHub flow, the Git reference manual, and pull-request documentation.
3.1 Start or copy a repository¶
Create a new local repository:
Clone an existing repository:
git init creates Git history around an existing directory. git clone copies an existing repository, its history, and a default remote named origin.
3.2 Inspect before acting¶
git statusis the safest first command when uncertain.git diffshows unstaged changes.git diff --stagedshows what the next commit will contain.git logshows committed history.
Build the habit of inspecting both the working-tree diff and the staged diff before committing.
3.3 Stage and commit intentionally¶
For more control, interactively stage parts of files:
A good commit is:
- Focused on one logical change
- Small enough to review
- Described with an imperative message such as
Add private endpoint validation - Free of generated files, temporary output, and secrets
The staging area lets you turn a messy working session into clear commits.
3.4 Work on a branch¶
git switch -c feature/private-key-vault
git branch
git switch main
git switch feature/private-key-vault
Older material may use git checkout; it can both switch branches and restore files. Modern Git provides git switch for branches and git restore for working-tree/staging operations, which is conceptually clearer.
3.5 Synchronize with GitHub¶
Important distinctions:
| Command | What it does |
|---|---|
git fetch |
Downloads remote commits and updates remote-tracking references; does not change your working branch |
git pull |
Fetches, then integrates into the current branch using merge or rebase configuration |
git push |
Sends local commits and updates a remote reference if allowed |
git fetch is a safe way to learn what changed before deciding how to integrate it. git pull --ff-only refuses to create a surprise merge commit when the local and remote histories have diverged.
Related item: A remote-tracking branch such as
origin/mainis your local record of the remote branch at the last fetch. It can be stale; fetching updates that record without changing your working branch.
-u sets an upstream tracking relationship so later git push and git pull can omit the remote and branch names.
3.6 Merge a branch¶
In collaborative GitHub work, you will more commonly merge through an approved pull request rather than directly into local main.
Merge strategies on GitHub¶
| Strategy | Result | When it helps |
|---|---|---|
| Merge commit | Preserves branch topology and adds a merge commit | The branch’s internal history is meaningful |
| Squash and merge | Combines the PR’s changes into one commit | Feature-branch commits are noisy; clean main history desired |
| Rebase and merge | Replays individual PR commits linearly | Individual commits are already clean and should remain separate |
The organization should choose a strategy deliberately. “Linear history” is not automatically better; it trades visible branch structure for a simpler sequence.
3.7 Resolve a merge conflict¶
A conflict means Git needs a human decision. It is not a Git failure.
A conflicted file may contain markers like:
Resolve it by editing the file into the desired final content, removing the markers, then:
If you are in a merge and want to return to the pre-merge state:
The correct resolution may use one side, the other side, or a new combination. Always run relevant tests after resolving conflicts.
3.8 Undo safely: restore, revert, reset¶
This is one of the most important Git distinctions.
| Command | Purpose | Shared-history safety |
|---|---|---|
git restore |
Restore working-tree content or unstage changes | Normally local and safe when target is understood |
git revert |
Create a new commit that reverses an earlier commit | Preferred for commits already shared |
git reset |
Move a branch and optionally change index/working tree | Can rewrite history or discard work |
Examples:
Discard uncommitted changes in one file:
Unstage without discarding the edit:
Reverse a published commit by adding a new commit:
Move the current branch back but retain the changes in the working tree:
git reset --hard can irreversibly discard tracked working-tree changes. Do not use it casually, and avoid rewriting history that other people may have based work on.
Exam and practice rule: revert shared history; reset only when you understand the local-history consequences.
3.9 Other useful commands¶
git show COMMIT_ID
git blame path/to/file
git stash push -m "WIP before branch switch"
git stash list
git stash pop
git tag -a v1.0.0 -m "Release v1.0.0"
git remote -v
git remote add upstream https://github.com/ORIGINAL/REPOSITORY.git
showinspects an object, often a commit and its patch.blameshows the last commit affecting each line; use it to find context, not to assign personal blame.stashtemporarily shelves local changes, but should not become permanent storage.- Annotated tags carry metadata and are normally preferred for releases.
upstreamis commonly used to track the original repository when working from a fork.
Part 4: Files Git needs you to understand¶
Primary references for this part: Writing on GitHub, repository documentation, and about CODEOWNERS.
4.1 .gitignore¶
.gitignore describes intentionally untracked files Git should ignore. For Terraform, common entries include:
Do not ignore .terraform.lock.hcl for a normal root module; committing it helps make provider selection reproducible.
.gitignore does not remove a file that is already tracked. If a secret was committed, adding it to .gitignore does not erase it from history. Revoke or rotate the credential first, then follow an approved history-cleanup process if necessary.
4.2 .gitattributes¶
.gitattributes controls path-specific Git behavior such as line-ending normalization, language detection, diffs, merges, and Git LFS treatment.
Example:
Use this when a cross-platform team needs predictable repository line endings. Do not confuse it with .gitignore: attributes govern tracked content; ignore rules control untracked-path discovery.
4.3 Repository documentation and community files¶
| File | Purpose |
|---|---|
README.md |
Explains what the project is and how to start |
LICENSE |
States legal permissions and obligations |
CONTRIBUTING.md |
Explains how to propose changes |
CODE_OF_CONDUCT.md |
Defines expected community behavior |
SECURITY.md |
Explains how to report vulnerabilities safely |
SUPPORT.md |
Directs users to appropriate support channels |
CODEOWNERS |
Maps paths to responsible users or teams |
CHANGELOG.md |
Summarizes notable release changes |
A repository without a license is not automatically open source merely because the public can view it. A public repository needs an explicit license if others are to know what reuse is permitted.
4.4 Markdown essentials¶
GitHub uses GitHub Flavored Markdown in issues, pull requests, Discussions, wikis, and .md files.
# Heading 1
## Heading 2
**bold** and *italic*
- Bullet
- Another bullet
1. First
2. Second
[GitHub](https://github.com)
`inline code`
```hcl
resource "azurerm_resource_group" "example" {
name = "rg-example"
location = "eastus2"
}
```
- [ ] Open task
- [x] Completed task
> Quoted text
Useful collaboration syntax:
@usernamementions a person.@organization/team-namementions a team when permitted.#123links to an issue or pull request in the same repository.OWNER/REPOSITORY#123links across repositories.Closes #123in a pull-request description can automatically close a linked issue when the PR merges.
Use descriptive link text and alt text for accessibility.
Part 5: GitHub accounts, products, and hierarchy¶
Primary references for this part: Types of GitHub accounts, roles in an organization, repository roles, and the GitHub plans comparison.
5.1 Account and ownership model¶
| Object | Owns or contains | Typical purpose |
|---|---|---|
| Personal account | Personal repositories, gists, settings | An individual identity on GitHub |
| Organization | Repositories, members, teams, policies | Shared ownership for a company or community |
| Enterprise account | One or more organizations and enterprise policies | Central governance and billing |
| Repository | Code, Git data, issues, PRs, Actions, settings | A project and its collaboration boundary |
| Team | Organization members and optional child teams | Permission assignment and review ownership |
Your personal account is your identity even when you work in organization-owned repositories. Do not create a shared “team user” to avoid managing individual access; shared identity weakens attribution and lifecycle control.
GitHub Enterprise Cloud and Server¶
- GitHub Enterprise Cloud (GHEC) provides enterprise capabilities on GitHub’s hosted service.
- GitHub Enterprise Server (GHES) is self-hosted by the customer and has its own release cadence.
- Enterprise Managed Users (EMU) lets an enterprise’s identity provider provision and control managed user accounts. These identities are intended for enterprise work and have different constraints from personal GitHub accounts.
Feature availability varies by plan and deployment. Never assume a feature present on GitHub.com is already available on a particular GHES version.
Product plans versus account types¶
Do not confuse the identity/ownership model with the commercial plan:
- GitHub Free and Pro are commonly associated with personal use.
- GitHub Free for organizations and GitHub Team provide organization collaboration at different entitlement levels.
- GitHub Enterprise adds enterprise governance and is available through Cloud and Server offerings.
An organization is an ownership and collaboration object; GitHub Team is a plan. An enterprise account is a governance object; GitHub Enterprise Cloud is the hosted enterprise product. Limits and entitlements change, so check the current GitHub plans comparison rather than memorizing transient numbers.
5.2 Repository visibility¶
| Visibility | Who can access it? |
|---|---|
| Public | Anyone can view; write access still requires permission |
| Private | Only explicitly authorized users and teams, subject to enterprise controls |
| Internal | Members of the enterprise, subject to policies and repository permissions |
Internal is not “public within one organization”; it is an enterprise visibility level. Availability depends on the GitHub product.
Changing visibility can affect forks, Actions, Pages, stars, security settings, and access. Treat it as a governance decision, not a cosmetic setting.
5.3 Repository roles¶
Standard repository roles progress approximately as follows:
| Role | Intended scope |
|---|---|
| Read | View and discuss the project |
| Triage | Manage issues and PRs without write access to code |
| Write | Push code and manage ordinary collaboration |
| Maintain | Manage the repository without access to sensitive/destructive administration |
| Admin | Full repository administration, including access and settings |
Organizations may also define custom repository roles on supported plans. Apply least privilege: give the smallest role needed for the work.
Organization roles and teams¶
- Organization owners have broad administrative authority.
- Members participate under organization policy and repository access.
- Outside collaborators may receive access to selected repositories without full membership.
- Teams group members for repository access, mentions, review requests, and CODEOWNERS.
Base permissions provide a default repository access level for organization members. Additional access can then be granted directly or through teams. Avoid excessive one-off grants when a maintained team represents the responsibility better.
Part 6: Creating and managing repositories¶
Primary references for this part: Repository documentation, the GitHub Changelog, and Feature Preview documentation.
6.1 Creating a repository¶
When creating a repository on GitHub, you normally choose:
- Owner
- Name and description
- Visibility
- Optional README
- Optional
.gitignoretemplate - Optional license
If you already have a local repository with commits, avoid initializing the GitHub repository with conflicting starter commits unless you plan to reconcile the histories.
Connect an existing local repository:
Or with the GitHub CLI:
6.2 Templates¶
Keep these distinct:
| Template type | What it standardizes |
|---|---|
| Repository template | Starting files and directory structure for a new repository |
| Issue form/template | Information collected when creating an issue |
| Pull-request template | Information authors should provide in a PR description |
| Workflow template | Suggested GitHub Actions workflow for repositories in an organization |
Organization .github repository |
Default community health files and workflow templates in supported locations |
Templates create a consistent starting point, but they do not enforce continued compliance.
6.3 Branches, tags, and releases¶
- A branch moves as new commits are added.
- A tag normally marks a particular commit.
- A GitHub release is built around a tag and can include notes, links, and binary assets.
Use a protected default branch for accepted work. Use feature branches for proposed changes. Use annotated tags and releases for versions that users or deployment processes need to identify.
Semantic versioning commonly uses MAJOR.MINOR.PATCH:
- Major: incompatible changes
- Minor: backward-compatible functionality
- Patch: backward-compatible fixes
GitHub does not require semantic versioning; it is a project convention.
Related item: A Git tag identifies a Git object; a GitHub Release adds a human-facing release page, notes, and assets around a tag. A package version may use the same number but is published through a separate registry lifecycle.
6.4 Repository insights and signals¶
| Feature | Meaning |
|---|---|
| Stars | Users bookmark or show interest in a repository |
| Watch | A user subscribes to selected repository notifications |
| Forks | Server-side copies used for independent development or contribution |
| Traffic | Views and clones over a limited reporting window |
| Contributors | Contribution activity based on repository history |
| Pulse/activity | Recent collaboration and change activity |
| Dependency graph | Repository dependencies and dependents where detectable |
| Network graph | Fork relationships and commit history |
A star is not an access grant, a watch is not a fork, and a fork is not a branch.
Feature Preview and change awareness¶
GitHub may offer early access to selected capabilities through Feature Preview. Preview features can change, have limited support, or be removed, so do not treat preview behavior as a permanent production contract. GitHub’s changelog, release notes, documentation, and status page are useful for distinguishing a new feature from a service incident or a feature that is not enabled for your account.
6.5 Maintain, archive, transfer, or delete¶
Good maintenance includes:
- Reviewing stale issues and PRs
- Updating dependencies
- Rotating credentials and removing unused access
- Keeping documentation, templates, and ownership accurate
- Reviewing rulesets and Actions permissions
- Publishing releases and deprecation notices
- Responding to vulnerability reports
Archive a repository when it should become read-only but remain available. Transfer changes ownership and may affect access and automation. Delete is destructive and should follow the organization’s retention and recovery procedures.
Part 7: GitHub Flow and pull requests¶
Primary references for this part: GitHub flow and pull-request documentation.
7.1 GitHub Flow¶
GitHub Flow is a lightweight, branch-based collaboration model:
flowchart TD
A["Create an issue or define work"] --> B["Create a branch"]
B --> C["Commit and push"]
C --> D["Open a pull request"]
D --> E["Review and automated checks"]
E --> F{"Approved and passing?"}
F -- No --> C
F -- Yes --> G["Merge and delete branch"]
The default branch should remain deployable according to the project’s standards. Work occurs on a branch, is discussed and validated in a pull request, and merges only when ready.
7.2 Pull requests are proposals, not just diffs¶
A pull request (PR) proposes merging changes from a head branch into a base branch. It provides:
- A diff
- Commit history
- Conversation
- Review decisions
- Automated checks
- Links to issues and Projects
- Merge controls
Open a draft PR when the work is visible and useful for early feedback but not ready for formal approval or merge.
A strong PR description¶
Include:
- Problem or goal
- What changed
- What deliberately did not change
- How it was tested
- Security and operational implications
- Screenshots or plan excerpts when useful
- Rollback considerations
- Linked issue
For Terraform, summarize additions, changes, replacements, deletions, permission changes, public exposure, and expected downtime. Do not paste secrets or excessively large plans into a PR.
7.3 Reviews¶
A reviewer can generally:
- Comment without a formal approval decision
- Approve the proposed changes
- Request changes that should be resolved before merge
Review comments may target the overall PR, a file, or specific lines. Suggested changes can provide a directly applicable patch. Conversations may need to be resolved before merge if a rule requires it.
Good review examines:
- Correctness
- Security and privacy
- Maintainability
- Tests and validation
- Scope and unintended changes
- Documentation
- Consistency with project conventions
Review the diff and the behavior, not merely whether automated checks are green.
7.4 Link PRs and issues¶
An issue usually represents a problem, request, decision, or unit of work. A PR represents a proposed implementation. Link them so the reason and implementation remain connected.
Keywords such as these can close an issue when the PR reaches the repository’s default branch:
Merely mentioning #123 creates a reference but does not necessarily close it.
7.5 Fork-based contribution¶
Use a fork when you do not have permission to create branches in the original repository or when independent ownership is useful.
Typical setup:
git clone https://github.com/YOUR-ACCOUNT/PROJECT.git
cd PROJECT
git remote add upstream https://github.com/ORIGINAL-OWNER/PROJECT.git
git fetch upstream
git switch main
git merge --ff-only upstream/main
git push origin main
You push a branch to your fork (origin) and open a PR against the original repository (upstream). A fork is a GitHub repository; a branch is a Git reference inside a repository.
Related item: Fork pull requests cross a trust boundary. Workflows should treat fork code and event text as untrusted and avoid exposing write tokens, secrets, or privileged self-hosted runners merely because the change appears in a pull request.
Part 8: Issues, Discussions, notifications, and publishing¶
Primary references for this part: Issues, Discussions, notifications, gists, wikis, and GitHub Pages.
8.1 Issues¶
Issues can track:
- Bugs
- Features
- Tasks
- Questions
- Decisions
- Incidents or follow-up work
Useful issue metadata includes:
| Feature | Purpose |
|---|---|
| Assignee | Person currently responsible for action |
| Label | Flexible categorization such as bug, security, or terraform |
| Milestone | Groups issues and PRs toward a target |
| Project | Adds the item to a planning view |
| Issue type | Classifies work using configured types |
| Sub-issue | Breaks a larger issue into trackable units |
| Dependency/blocking relationship | Shows sequencing constraints |
Issue templates and forms collect consistent information. Forms can require structured fields; a Markdown template provides suggested prose but is less deterministic.
Use filters and search qualifiers to find work:
is:issue is:open label:security assignee:@me
is:pr is:open review-requested:@me
repo:OWNER/REPO is:issue milestone:"v2.0"
8.2 Discussions¶
Use GitHub Discussions for open-ended community or team conversation such as:
- Questions and answers
- Ideas
- Announcements
- General design conversation
- Community polls
Use an issue when there is a concrete trackable outcome. A useful Discussion can later become an issue when a decision creates actionable work.
8.3 Notifications¶
Notifications are created through activities such as:
- Being directly mentioned
- Being assigned
- Being requested as a reviewer
- Participating in a conversation
- Watching a repository
- Subscribing to a thread
You can tune watching per repository and unsubscribe from noisy threads. Use notification filters and saved searches to establish an intentional review queue rather than treating email as the only source of truth.
8.4 Saved replies¶
Saved replies reuse common responses, such as asking for a minimal reproduction or explaining support policy. They improve consistency but should be personalized when the situation deserves it.
8.5 Gists, wikis, and Pages¶
| Feature | Best use |
|---|---|
| Gist | Small code snippets or notes backed by Git |
| Wiki | Repository-associated documentation maintained as pages |
| GitHub Pages | Static website published from a repository or Actions workflow |
Public gists are discoverable; secret gists are unlisted, not a secure secret-storage mechanism. GitHub Pages publishes static content and must not expose secrets embedded in generated assets.
Part 9: GitHub Actions fundamentals¶
Primary references for this part: GitHub Actions, workflow concepts, secure use, and reusing workflows.
9.1 What Actions does¶
GitHub Actions automates work in response to repository events, manual dispatch, schedules, or reusable calls. Common uses include:
- Build and test
- Lint and format checks
- Security scanning
- Package and release publishing
- Infrastructure plan and deployment
- Issue and PR automation
Actions configuration is stored as YAML under:
9.2 Workflow vocabulary¶
| Term | Meaning |
|---|---|
| Workflow | YAML-defined automated process |
| Event/trigger | Activity that starts a workflow, such as pull_request |
| Job | Collection of steps run on one runner; jobs can depend on other jobs |
| Step | A shell command or an action within a job |
| Action | Reusable unit that performs a task |
| Runner | Machine that executes a job |
| Marketplace | Directory where actions and apps can be discovered |
| Artifact | File retained from a workflow run, such as logs or build output |
| Cache | Reused dependencies intended to speed later runs |
| Environment | Deployment target with secrets and protection rules |
Minimal Terraform validation example¶
name: Terraform validation
on:
pull_request:
paths:
- "**/*.tf"
- ".github/workflows/terraform.yml"
permissions:
contents: read
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v5
- name: Set up Terraform
uses: hashicorp/setup-terraform@v4
- name: Check formatting
run: terraform fmt -check -recursive
- name: Initialize without backend
run: terraform init -backend=false
- name: Validate configuration
run: terraform validate
This workflow checks code, but it becomes an enforcement control only when its status is required by a ruleset or branch protection rule.
9.3 Hosted and self-hosted runners¶
- GitHub-hosted runners are temporary environments operated by GitHub.
- Self-hosted runners are managed by you and may reach internal resources, but require patching, isolation, monitoring, and lifecycle controls.
Running untrusted pull-request code on a privileged self-hosted runner is dangerous. Treat workflow code as code execution, review it carefully, and isolate sensitive runners.
9.4 Workflow security¶
Important practices:
- Grant the
GITHUB_TOKENonly required permissions. - Pin third-party actions to trusted versions; for high assurance, pin to a full commit SHA and manage updates.
- Prefer OpenID Connect (OIDC) for short-lived cloud authentication instead of long-lived Azure client secrets.
- Protect deployment environments with approval rules where appropriate.
- Do not print secrets or sensitive plan output.
- Avoid executing untrusted PR content with privileged credentials.
- Review dependency and action provenance.
- Separate plan and apply, and protect production deployment.
Related item: CI continuously integrates and validates changes; continuous delivery keeps changes deployable through an approved release process; continuous deployment automatically releases qualifying changes. Teams often say “CI/CD” without distinguishing the final approval boundary.
Reusable workflows versus composite actions¶
| Mechanism | Reuses |
|---|---|
| Reusable workflow | One or more jobs, including runners, permissions, and job orchestration |
| Composite action | A sequence of steps invoked inside a job |
An organization can centralize its Terraform validation as a reusable workflow and have many repositories call it. The caller can reference a branch, tag, or commit; pinning to an immutable commit is strongest against unexpected changes.
Part 10: Development environments¶
Primary references for this part: The
github.deveditor, Codespaces deep dive, and introduction to dev containers.
10.1 GitHub Desktop and Mobile¶
GitHub Desktop provides a graphical interface for cloning, branching, committing, synchronizing, resolving some conflicts, and opening pull requests. It is useful, but the underlying Git concepts still matter when a workflow becomes complicated.
GitHub Mobile supports notification triage, issues, pull requests, review, and collaboration. It is not intended to replace a full development environment.
10.2 github.dev¶
Press . while viewing a repository on GitHub, or change github.com to github.dev, to open a lightweight web editor.
It is useful for:
- Browsing and editing files
- Search and navigation
- Source-control operations
- Small changes from a browser
It does not provide the full compute environment of a codespace. There is no normal remote virtual machine in which to install arbitrary tools and run Terraform.
10.3 GitHub Codespaces¶
A codespace is a cloud-hosted development environment associated with a repository. It commonly includes:
- A containerized environment
- VS Code in the browser or desktop client
- Terminal and compute
- Forwarded ports
- Repository-specific configuration
- Secrets supplied through Codespaces settings
Codespaces consumes billable compute and storage according to the applicable plan and policy. Stop or delete unused codespaces appropriately.
10.4 Development containers¶
A .devcontainer/devcontainer.json file describes the development environment, often including:
- Base image or Dockerfile
- Tools and features
- VS Code extensions
- Port forwarding
- Initialization commands
- User and container settings
Example concept:
{
"name": "Terraform on Azure",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/devcontainers/features/azure-cli:1": {},
"ghcr.io/devcontainers/features/terraform:1": {},
"ghcr.io/devcontainers/features/github-cli:1": {}
}
}
A dev container makes the toolchain reproducible. A codespace is one hosted place that can run that dev-container configuration. Dev containers can also run locally in compatible tooling.
Part 11: GitHub Copilot in the GitHub platform¶
Primary references for this part: GitHub Copilot documentation and the live Copilot plans page.
GH-900 expects high-level familiarity, not the full GH-300 depth.
11.1 What Copilot can assist with¶
Depending on product, plan, client, policy, and feature availability, Copilot can help with:
- Inline code suggestions
- Chat and explanations
- Multi-file edits and Agent Mode
- Pull-request descriptions and summaries
- Code review
- Command-line assistance
- Issue-to-code or cloud-agent workflows
- Documentation and test generation
Where supported, users may select among multiple AI models. Model availability can depend on the subscription, enterprise or organization policy, client, and current service offering. Choosing a model changes the engine used for a request; it does not remove the need to supply relevant context or validate the result.
Copilot output is a proposal. The developer remains responsible for correctness, security, licensing considerations, and validation.
11.2 Plans and policy¶
The blueprint's phrase Copilot for Individuals is a category, not one current plan name. Current individual offerings include Free and Student plans and the paid Pro, Pro+, and Max plans. The subscription belongs to the individual rather than being a seat assigned and centrally governed by an organization.
| Blueprint category | Intended ownership | Durable distinction |
|---|---|---|
| Copilot for Individuals | An individual GitHub user | The user selects and manages an individual offering; usage allowances and available models/features vary by that offering. |
| Copilot Business | An organization or enterprise grants seats to members | Adds centralized license assignment and organization/enterprise policy control for managed use. |
| Copilot Enterprise | An enterprise using GitHub Enterprise Cloud grants seats through its organizations | Includes the Business capabilities, plus a larger included AI-credit pool and additional enterprise capabilities. An enterprise owner can choose Business or Enterprise per organization. |
Business and Enterprise are governance subscriptions for managed users; they are not GitHub account types, and enabling a plan does not override enterprise or organization policy. Copilot is not currently available for GitHub Enterprise Server.
VERIFY CURRENT: Plan names, eligibility, prices, credit allowances, models, feature matrices, and the Business-versus-Enterprise feature delta change. Review the live GitHub Copilot plans page near the exam and memorize the ownership and governance distinctions rather than transient numbers.
Keep three questions separate:
- Entitlement: Does the subscription include the feature?
- Policy: Has the enterprise or organization allowed it?
- Client availability: Does the current editor or GitHub surface support it?
11.3 Copilot and repository governance¶
Copilot can read relevant repository context and custom instructions where supported. It can help follow standards, but deterministic controls still matter:
This relationship is foundational for GH-300. Copilot is a participant in the GitHub workflow, not the authority that approves its own changes.
Part 12: GitHub Projects¶
Primary references for this part: GitHub Projects documentation and the Projects quickstart.
GitHub Projects is a flexible planning system that can track issues, pull requests, and draft items.
12.1 Views¶
| View | Best for |
|---|---|
| Table | Spreadsheet-like planning, sorting, grouping, and bulk editing |
| Board | Status-oriented flow such as backlog, in progress, review, done |
| Roadmap | Work scheduled across time |
Different views can show the same underlying items. A view is a lens, not a duplicate project.
12.2 Fields and organization¶
Projects can use:
- Built-in metadata from issues and PRs
- Single-select fields such as Status or Priority
- Text and number fields
- Date fields
- Iterations
- Repository, assignee, labels, and milestones
Use labels for repository-level categorization, milestones for a repository delivery target, and project fields for portfolio-specific planning across repositories.
12.3 Workflows and insights¶
Built-in or configured workflows can change project fields when events occur—for example, set Status to Done when an item closes. Project insights can visualize progress and item distribution.
Example project for a Terraform platform:
| Field | Sample values |
|---|---|
| Status | Backlog, Ready, In progress, Review, Done |
| Priority | P0, P1, P2, P3 |
| Service | Networking, Identity, Compute, Governance |
| Environment | Dev, QA, Production |
| Target iteration | Two-week iteration |
Do not create dozens of fields merely because you can. Every field should support a decision, filter, workflow, or report.
Part 13: Authentication, privacy, and access security¶
Primary references for this part: About authentication to GitHub, two-factor authentication, and passkeys.
13.1 Secure the user account¶
Use:
- A unique password through a password manager
- Two-factor authentication
- Passkeys or security keys where appropriate
- Reviewed and current recovery methods
- Periodic review of sessions, authorized OAuth apps, GitHub Apps, SSH keys, and tokens
2FA and passkeys¶
Two-factor authentication requires a second factor beyond the password. Passkeys use public-key cryptography and can provide passwordless, phishing-resistant authentication depending on device and setup. Recovery codes must be stored securely and separately.
13.2 Token principles¶
For personal access tokens:
- Prefer fine-grained access where supported.
- Restrict the token to required repositories and permissions.
- Set an appropriate expiration.
- Store it in an approved secret manager or credential store.
- Rotate and revoke it when no longer needed.
- Never commit it.
A classic PAT uses broad scopes and may still be necessary for some operations. “Fine-grained” does not remove the need to verify the exact permissions and organizational approval.
13.3 Least privilege and separation of duties¶
Examples:
- Developers get write access, not repository admin, unless needed.
- Platform owners administer rules and reusable workflows.
- Security teams own security policy and escalation paths.
- Production deployment requires an environment approval.
- An author cannot satisfy all review requirements alone.
GitHub permissions answer who can perform an operation. Rulesets answer what conditions a reference update must satisfy. Actions answer what automated checks or work run.
Part 14: Branch protection, rulesets, and ownership¶
Primary references for this part: Branch protection, rulesets, available rules, and CODEOWNERS.
14.1 Branch protection versus rulesets¶
Both can protect important branches. Rulesets offer a newer, centrally manageable model that can target multiple repositories and provide clearer layering and evaluation. Exact availability depends on the GitHub product and repository visibility.
Related item: CODEOWNERS answers who should review a path. A required code-owner review rule turns that routing information into enforcement. Either mechanism alone provides only half of the control.
Common controls include:
- Require a pull request before merging
- Require approvals
- Require code-owner review
- Dismiss stale approvals when new commits arrive
- Require status checks
- Require conversation resolution
- Require signed commits
- Require linear history
- Block force pushes and deletion
- Restrict who may push
- Require deployments to succeed
Do not assume administrators bypass a rule; bypass behavior is explicitly configured and should be tightly controlled and audited.
14.2 CODEOWNERS¶
A CODEOWNERS file maps paths to users or teams:
# Default owners
* @contoso/platform-maintainers
# Terraform modules
/modules/ @contoso/terraform-maintainers
# Workflow changes
/.github/workflows/ @contoso/devops-platform @contoso/security
# Security policy owns itself
/SECURITY.md @contoso/security
GitHub can automatically request review from matching owners. But the file alone does not block merging. A branch protection rule or ruleset must require code-owner approval.
14.3 Guidance, checking, and enforcement¶
| Mechanism | Guides | Checks | Can block merge/use |
|---|---|---|---|
| README/standards document | Yes | No | No |
| Copilot instructions | Yes | No | No |
| PR template | Yes | No | No |
| Copilot code review | Yes | Partly | Not by itself |
| GitHub Actions workflow | No | Yes | Only if its check is required |
| CODEOWNERS | Routes review | No | Only with required owner review |
| Ruleset/branch protection | No | Evaluates conditions | Yes |
| Enterprise/organization policy | No | No | Yes for governed features |
This table is worth memorizing. Organizations often believe they enforce a rule when they have only written or automated it.
Part 15: Repository and supply-chain security¶
Primary reference for this part: GitHub code security documentation.
15.1 The main GitHub security capabilities¶
Names and packaging can evolve, but the concepts are stable:
| Capability | Purpose |
|---|---|
| Dependency graph | Identifies direct and transitive dependencies where supported |
| Dependency review | Shows dependency changes introduced by a PR |
| Dependabot alerts | Reports known vulnerable dependencies |
| Dependabot security updates | Proposes updates for vulnerable dependencies |
| Dependabot version updates | Proposes scheduled dependency updates |
| Secret scanning | Detects supported secret patterns in repository content/history |
| Push protection | Blocks or warns about detected secrets before they are pushed |
| Code scanning | Finds vulnerabilities and coding errors using tools such as CodeQL |
| Security overview | Aggregates risk and enablement across repositories for authorized administrators |
| Private vulnerability reporting | Gives security researchers a private reporting path |
| Security advisories | Coordinates vulnerability remediation and disclosure |
Some capabilities are available broadly for public repositories; private-repository availability depends on plan and configuration.
15.2 Dependabot concepts¶
- An alert says a dependency is known to be vulnerable.
- A security update proposes a version change to remediate an alert.
- A version update keeps dependencies current according to configuration, even without an active vulnerability.
- Dependency review examines what a PR adds, removes, or changes.
Automation does not eliminate review. A dependency update can introduce breaking behavior or supply-chain risk.
15.3 Secret response¶
If a secret is committed:
- Revoke or rotate it immediately.
- Determine scope and evidence of use.
- Remove it from the current files.
- Decide whether history rewriting is required under organizational policy.
- Notify affected collaborators because history rewriting changes commit identities.
- Add preventive controls such as push protection and secret-scanning alerts.
Deleting a file or adding it to .gitignore is not credential remediation.
Related item: Secret scanning detects exposure; push protection attempts to prevent supported secrets from entering the repository; a vault or federated identity reduces the need to handle long-lived secrets at all. These controls address different stages of the secret lifecycle.
15.4 Audit and administration¶
Organization and enterprise audit logs help investigate administrative, access, policy, and security events. Retention, export, and streaming capabilities depend on the plan. Use audit data to answer who changed access, settings, policies, or protected resources; do not treat it as a substitute for application telemetry.
Part 16: GitHub community, open source, and InnerSource¶
Primary references for this part: Open Source Guides, GitHub Marketplace, and GitHub Sponsors.
16.1 Open source fundamentals¶
Open source is more than a public repository. A healthy project normally provides:
- A license
- A README
- Contribution guidance
- A code of conduct
- An issue and review process
- Maintainers and governance
- Security reporting guidance
GitHub Sponsors lets eligible developers and organizations receive financial support. GitHub Marketplace helps users discover GitHub Apps and Actions. Review an integration’s publisher, permissions, maintenance, and security posture before installing or using it.
16.2 Discover and follow¶
- Follow people or organizations to see relevant activity.
- Star repositories to mark interest.
- Watch repositories or threads to receive notifications.
- Explore/search/topics help discover projects.
- Fork creates a repository copy for independent work or contribution.
These actions have distinct purposes; none automatically grants write permission.
16.3 InnerSource¶
InnerSource applies open-source collaboration patterns inside an organization. A team may own a shared module while other internal teams contribute through issues and PRs.
A useful InnerSource repository includes:
- Clear ownership and support expectations
- Discoverable documentation and examples
- Contribution guidelines
- Issue and PR templates
- Automated validation
- Predictable review service levels
- A license or internal-use statement appropriate to company policy
For an Azure platform team, an internal Terraform module catalog is a natural InnerSource model: central maintainers protect interfaces and quality, while application teams contribute fixes and enhancements through the same governed workflow.
Related item: InnerSource needs a contribution contract as well as readable code: ownership, support level, compatibility policy, review expectations, release process, and a path for teams to propose changes without bypassing maintainers.
Part 17: A complete organizational workflow¶
Primary references for this part: GitHub flow, workflow security, and available rules for rulesets.
Consider a request to add a private Azure Key Vault to a Terraform repository.
17.1 Before development¶
- The organization owns the repository.
- A platform team has write or maintain access.
mainis protected by a ruleset.CODEOWNERSassigns.tfand workflow changes to appropriate teams.- The repository has contribution, security, and Copilot instructions.
- A reusable Actions workflow performs formatting, validation, linting, and security checks.
- Azure authentication uses OIDC with an appropriately scoped identity.
17.2 During development¶
- An issue records the requirement and acceptance criteria.
- The developer creates a feature branch.
- Git records focused local commits.
- The branch is pushed to GitHub.
- A draft PR makes the design visible early.
- Actions validate the change.
- Copilot may help explain, implement, test, or review, subject to instructions and policy.
- Human reviewers examine the plan, permissions, exposure, and maintainability.
- The author resolves findings and conversations.
- Required checks and approvals allow the merge.
- The PR closes the linked issue.
- A protected deployment workflow handles environment promotion.
17.3 Where the standards live¶
| Standard | Example location/mechanism |
|---|---|
| “Use private endpoints” | Architecture docs and Copilot instructions |
| “Run Terraform validation” | Reusable Actions workflow |
| “Validation must pass” | Ruleset-required status check |
“Platform team reviews .tf changes” |
CODEOWNERS plus required owner approval |
| “No long-lived Azure secret” | OIDC workflow design and secret policy |
| “Only approved Actions may run” | Organization or enterprise Actions policy |
| “Production requires approval” | Protected GitHub environment |
| “Track who changed policy” | Organization/enterprise audit log |
This is GitHub as an engineering system: documentation shapes intent, automation provides evidence, people exercise judgment, and governance controls the final state.
Living-guide watch — October 28, 2026¶
Credential and assessment access: Microsoft’s current GitHub Foundations credential page continues to describe GH-900 as a nonrenewing fundamentals certification. Its official practice assessment now launches through AI Skills Navigator and requires sign-in; the assessment questions were not accessed. GitHub Foundations credential page.
Current collaboration feature: Stacked pull requests became generally available on October 6. Stacked PRs let authors build dependent changes as a sequence of smaller pull requests; understand the base-branch relationship and review/merge order. This is product context, not a change to the published GH-900 objectives.
Part 18: Hands-on labs¶
Do these in a disposable repository. Avoid real credentials and production subscriptions.
Lab 1: Create and inspect a repository¶
Goal: Understand working tree, staging, commits, and remote synchronization.
- Create a private GitHub repository without starter files.
- Locally create
README.md,.gitignore, and a smallmain.tf. - Run
git statusafter each edit. - Stage only
README.md; comparegit diffwithgit diff --staged. - Make two focused commits.
- Add
originand pushmain. - Inspect the commits and file history on GitHub.com.
You have learned it when: you can explain why a saved file may be untracked, modified, staged, committed, or pushed.
Lab 2: Use GitHub Flow¶
Goal: Complete a branch-and-PR cycle.
- Create issue
Add required Terraform version. - Create branch
feature/required-version. - Add
versions.tfand commit it. - Push the branch and open a draft PR.
- Include
Closes #1, testing, and impact in the description. - Mark it ready, review the diff, and merge it.
- Delete the feature branch and update local
main.
You have learned it when: you can distinguish the issue, branch, commit, PR, review, and merge.
Lab 3: Resolve a conflict¶
Goal: Treat conflicts as a normal integration task.
- Create two branches from the same commit.
- On both branches, edit the same README line differently.
- Merge the first branch.
- Try to merge or update the second.
- Inspect the conflict markers and
git status. - Create the correct combined text, stage it, and finish the merge.
- Inspect the graph with
git log --graph --oneline --all.
You have learned it when: you can explain why the conflict occurred and how you selected the final content.
Lab 4: Add Terraform checks¶
Goal: Understand workflows, jobs, steps, runners, and status checks.
- Add a pull-request workflow that runs
fmt,init -backend=false, andvalidate. - Open a PR containing deliberately unformatted Terraform.
- Inspect the failed step and logs.
- Correct the file and push another commit.
- Watch the same PR update to a passing check.
- Make the check required in a repository ruleset, if available in your plan.
You have learned it when: you can explain why an Actions check does not block merging until a rule requires it.
Lab 5: Add ownership and governance¶
Goal: Connect teams, CODEOWNERS, and rulesets.
- In an organization test repository, create a team or identify an existing one.
- Add a CODEOWNERS rule for
*.tf. - Configure required PR and code-owner review.
- Open a Terraform PR and observe the requested review.
- Examine the rule’s bypass configuration.
You have learned it when: you can separate automatic review routing from enforced approval.
Lab 6: Use Issues and Projects¶
Goal: Plan work without duplicating it.
- Create three issues: network module, Key Vault module, and CI validation.
- Add labels, assignees, and a milestone.
- Add them to a Project.
- Create table and board views over the same items.
- Add Priority and Status fields.
- Configure an automatic status transition when an issue closes.
You have learned it when: you can explain the difference between label, milestone, project field, and view.
Lab 7: Compare browser development choices¶
Goal: Understand github.dev, Codespaces, and dev containers.
- Open the repository with
github.devand make a README edit. - Notice which terminal/runtime capabilities are absent.
- Add a Terraform dev-container configuration.
- Create a codespace and run
terraform versionandterraform validate. - Stop the codespace and review retention/billing settings.
You have learned it when: you can state that github.dev is an editor, Codespaces supplies hosted compute, and the dev container defines the environment.
Lab 8: Respond to a simulated secret¶
Goal: Learn the correct response order without using a real credential.
- Create a fake string clearly labeled as nonfunctional.
- Observe whether scanning recognizes it; do not use an actual secret.
- Write an incident checklist that begins with rotation/revocation.
- Enable available secret protection features.
- Confirm
.gitignoreis preventive for untracked files, not a history eraser.
You have learned it when: your first response to an exposed real credential would be to invalidate it, not merely delete the file.
Part 19: High-value distinctions for the exam¶
| If the question contrasts… | Remember… |
|---|---|
| Git and GitHub | Git is distributed version control; GitHub hosts Git and adds collaboration/services |
| Commit and push | Commit records locally; push sends commits to a remote |
| Fetch and pull | Fetch downloads; pull downloads and integrates |
| Clone and fork | Clone is a local copy; fork is a GitHub-owned repository copy under another account |
| Branch and tag | Branch normally moves; tag normally marks a fixed commit |
| Issue and PR | Issue tracks the need; PR proposes the change |
| Discussion and issue | Discussion is open-ended; issue is actionable/trackable |
| Star and watch | Star marks interest; watch controls notifications |
| GitHub Pages and wiki | Pages publishes a static site; wiki provides repository documentation pages |
github.dev and Codespaces |
Web editor versus hosted development compute |
| Dev container and Codespaces | Environment definition versus hosted instance of an environment |
| Action and workflow | Action is reusable task logic; workflow orchestrates jobs and steps |
| Artifact and cache | Artifact is retained output; cache speeds later runs |
| Repository template and fork | Template starts new disconnected history; fork preserves network relationship |
| CODEOWNERS and ruleset | CODEOWNERS identifies reviewers; a rule makes approval mandatory |
| Actions check and required check | A workflow produces a result; a rule can require that result before merge |
| Read and triage | Triage manages issues/PRs without code write permission |
| Public and internal | Public is internet-visible; internal is enterprise-visible |
| Reset and revert | Reset moves history; revert adds a reversing commit |
.gitignore and secret removal |
Ignore prevents ordinary tracking; it does not erase tracked history or rotate credentials |
| Dependabot alert and update | Alert reports risk; update proposes remediation |
| Copilot guidance and enforcement | Copilot can follow instructions; checks, reviews, and rules provide control |
Part 20: Command cheat sheet¶
Create and inspect¶
git init
git clone URL
git status
git diff
git diff --staged
git log --oneline --graph --decorate --all
git show COMMIT
Stage and commit¶
Branch and integrate¶
Remotes¶
git remote -v
git remote add origin URL
git remote add upstream URL
git fetch origin
git pull --ff-only
git push -u origin BRANCH
Undo and temporary work¶
git restore FILE
git restore --staged FILE
git revert COMMIT
git stash push -m "Description"
git stash list
git stash pop
GitHub CLI¶
gh auth login
gh auth status
gh repo clone OWNER/REPO
gh issue create
gh issue list
gh pr create
gh pr status
gh pr checkout NUMBER
gh pr review NUMBER
gh pr merge NUMBER
gh run list
gh run view RUN_ID --log
Use --help, such as gh pr create --help, rather than guessing options.
Part 21: Seven-session study plan¶
Session 1 — Git mental model¶
- Version control benefits
- Working tree, staging, commit, local repository, remote
- Branch, tag,
HEAD, SHA, origin, upstream - Lab 1
Session 2 — GitHub Flow¶
- Branches, commits, pushing
- Issues, PRs, reviews, merge strategies
- Fork workflow
- Labs 2 and 3
Session 3 — Repository management and collaboration¶
- Repository files and templates
- Visibility, releases, insights
- Issues, Discussions, notifications
- Markdown practice
Session 4 — Actions and environments¶
- Workflow/job/step/action/runner/event
- Artifacts, cache, secrets, environments
- OIDC and least permissions
- Labs 4 and 7
Session 5 — Projects and community¶
- Views, fields, workflows, insights
- Open source, licenses, Sponsors, Marketplace
- InnerSource
- Lab 6
Session 6 — Security and governance¶
- Account security and authentication
- Roles, teams, base permissions
- CODEOWNERS, rulesets, branch protection
- Dependabot, secret scanning, code scanning
- Labs 5 and 8
Session 7 — Integration and review¶
- Walk through Part 17 without notes
- Drill the distinctions in Part 19
- Explain every command in Part 20
- Take the official practice assessment
- Review every wrong and uncertain answer, including answers you guessed correctly
Part 22: Readiness checklist¶
You are ready on GitHub fundamentals when you can explain or demonstrate all of these without relying on memorized slogans.
Git and GitHub basics¶
- Explain why Git is distributed and how GitHub differs from Git.
- Distinguish working tree, staging area, local repository, and remote.
- Explain commit, branch, tag,
HEAD, remote, origin, and upstream. - Create, clone, inspect, stage, commit, fetch, pull, and push.
- Explain merge and rebase at a conceptual level.
- Safely choose among restore, revert, and reset.
- Resolve a simple merge conflict.
- Explain
.gitignoreand.gitattributes.
Repositories and collaboration¶
- Create a repository with appropriate visibility and starter files.
- Explain README, LICENSE, CONTRIBUTING, SECURITY, and CODEOWNERS.
- Distinguish branches, forks, repository templates, tags, and releases.
- Complete GitHub Flow from issue to merged PR.
- Use draft PRs, reviews, and closing keywords appropriately.
- Distinguish issues, Discussions, Projects, milestones, and labels.
- Explain notifications, stars, watching, gists, wikis, and Pages.
Modern development¶
- Explain workflow, event, job, step, action, and runner.
- Distinguish artifacts, caches, environments, secrets, and variables.
- Explain why minimal permissions and OIDC matter.
- Distinguish
github.dev, Codespaces, and dev containers. - Describe Copilot’s role without treating its output as authoritative.
Projects, security, and administration¶
- Build table, board, and roadmap views over the same Project items.
- Explain personal accounts, organizations, teams, enterprises, and EMU.
- Distinguish repository roles and apply least privilege.
- Explain public, private, and internal visibility.
- Connect CODEOWNERS with required code-owner review.
- Connect Actions status checks with a ruleset that requires them.
- Explain Dependabot, dependency review, secret scanning, and code scanning.
- State the correct response to an exposed secret.
- Explain open source, licensing, Marketplace, Sponsors, and InnerSource.
Part 23: Primary sources and continued learning¶
Use official documentation as the final authority because GitHub changes quickly.
Certification and learning¶
Git¶
Collaboration and repositories¶
- GitHub Flow
- Repositories documentation
- Issues documentation
- Pull requests documentation
- Markdown documentation
- About CODEOWNERS
Development and automation¶
- GitHub Actions documentation
- Workflow concepts
- Secure use of Actions
- Reusing workflows
github.devweb editor- Codespaces deep dive
- Development containers
Administration and security¶
- Types of GitHub accounts
- Roles in an organization
- Organizing members into teams
- Repository roles
- Rulesets
- Available rules for rulesets
- Branch protection
- GitHub security features
- GitHub Enterprise Cloud introduction
Community and planning¶
- GitHub Projects documentation
- Projects quickstart
- Open source guides
- GitHub Marketplace
- GitHub Sponsors
Final mental model¶
If the details begin to feel scattered, return to this sequence:
- Git records: working tree → stage → commit → branch history.
- GitHub shares: remote repository → push/fetch → access and visibility.
- People collaborate: issue → branch → pull request → review → merge.
- Automation checks: Actions run tests, validation, scans, and deployment tasks.
- Governance decides: permissions, teams, CODEOWNERS, environments, and rulesets control what is allowed.
- Security observes and protects: authentication, dependency controls, scanning, and audit logs reduce risk.
- Copilot assists: it uses the repository and workflow context, while humans and deterministic controls retain responsibility.
Master that system and GitHub stops being a maze of features. Each feature has a clear job: record, share, discuss, check, protect, or govern.
Related item: GH-900 introduces Copilot as one part of the GitHub platform. Continue with the separate GH-300 GitHub Copilot guide when you need blueprint-level depth on responsible use, prompt context, agents, safeguards, and Copilot administration.
Places to learn¶
This is a curated starting point, not a complete list, and it is not meant to be consumed in full. Start with the official paths, then pick the explanations, formats, and practice that work for you and close specific blueprint gaps. Times are approximate consumption time at normal speed; labs, note-taking, review, and independent practice add time.
| Resource | Access | Estimated time | Best use and caveat |
|---|---|---|---|
| Microsoft Learn — GitHub Foundations Part 1 and Part 2 | Free | About 12–16 hours | Official starting point and closest match to the January 2026 objectives |
| AI Skills Navigator — GH-900 Practice Assessment | Free; sign-in required | About 1–2 hours for an attempt and review (planning estimate) | Current credential page links this official assessment; its questions and launch session were not accessed |
| Microsoft Learn GH-900 video course | Free | About 6–8 hours | Official instructor-led reinforcement for visual learners |
| Microsoft Reactor — From Git to GitHub Foundations | Free | 1 hour | Current first-party orientation covering the path from Git concepts into GitHub; supporting depth rather than an end-to-end GH-900 course |
| GitHub Skills — Introduction to GitHub | Free account | About 45–90 minutes | Guided practice with branches, commits, pull requests, and repository interaction |
| Pluralsight — GitHub Foundations | Subscription | 12 hours | Nine-course path; compare course dates with the current blueprint |
| DataCamp — GitHub Foundations | Subscription | About 12–20 hours including exercises | GitHub-partnered interactive track mapped to exam objectives |
| Whizlabs — GitHub Foundations practice | Paid course | About 3–6 hours for 3 quizzes and review | Assessment supplement rather than primary instruction; the provider does not publish a total runtime |
| MeasureUp — GH-900 practice test | Paid test or subscription; free demo available | About 4–8 hours for simulation and review | Tier 6 assessment supplement with 100 questions, explanations, and references; use results to find blueprint gaps rather than memorize items |
| O'Reilly — GitHub Foundations interactive practice test | Subscription | About 2–4 hours for an attempt and review | O'Reilly's public certification-prep catalog lists a GitHub Foundation practice test; exact launch details appear after sign-in |
| O'Reilly — GitHub Foundations Certification Guide | Subscription | About 10–14 hours reading/practice | Book-length treatment published August 2025; fill January 2026 changes from Microsoft Learn |
| Udemy — GH-900 exam prep: GitHub Foundations | Purchase or subscription | 5 hours 42 minutes | Instructional course updated November 2025; evaluate the individual course, not the marketplace name |
| freeCodeCamp / Andrew Brown — GitHub Foundations course | Free | About 11 hours | Long-form visual course for fundamentals; it targets an older blueprint |
| John Savill — DevOps Master Class and companion repository | Free | About 4–6 hours for the two linked parts | Strong supporting explanations, handouts, whiteboards, and examples; start with Master Git and Azure DevOps and GitHub. It is not an end-to-end GH-900 course, and the repository has no detected license, so link rather than republish its files. |
See the broader Places to learn catalog for selection criteria, provider notes, and resources for the other GitHub exams.