Collaboration Features — Issues, PRs, Discussions
This domain covers GitHub's core collaboration toolset: Issues, Pull Requests, Discussions, GitHub Projects, code review mechanics, branch protection, and automation through CODEOWNERS and cross-references. It constitutes 25% of the GitHub Foundations exam, making it the single largest domain. Questions test precise knowledge of feature names, configuration options, behavioral defaults, and when to use one tool over another.
Issues: Creating, Labels, Milestones, Assignees, Closing with Keywords
Issues are the primary unit of work tracking on GitHub. Any repository member (or external contributor with appropriate permissions) can open an issue.
Core Issue Components
| Component | Details |
|---|---|
| Labels | Color-coded tags; up to 100 labels per repository; default set includes bug, enhancement, good first issue, help wanted, invalid, question, wontfix; custom labels can be created |
| Milestones | Group issues and PRs toward a goal; show progress as a percentage of closed items; have an optional due date; a single issue can belong to only one milestone |
| Assignees | Up to 10 assignees per issue; must be repository collaborators or organization members |
| Projects | Issues can be added to one or more GitHub Projects (v2) |
Closing Issues with Keywords
When a commit message, PR description, or comment contains a closing keyword followed by an issue reference, GitHub automatically closes the issue when the PR merges into the default branch.
Accepted closing keywords: close, closes, closed, fix, fixes, fixed, resolve, resolves, resolved
Syntax examples:
Fixes #42Closes org/repo#17Resolves https://github.com/owner/repo/issues/5
Common traps
- Closing keywords in a PR comment do not close the issue when the comment is posted — they close it when the PR merges.
- Closing keywords only auto-close issues when the PR targets the default branch. Merging into a feature branch does NOT close the issue.
Fixedandfixboth work — keywords are case-insensitive.- You can reference an issue without closing it using
#42alone (no keyword).
Issue Templates and Forms: YAML-Based Forms, Required Fields
GitHub supports two types of issue templates stored in .github/ISSUE_TEMPLATE/:
| Type | File Format | Features |
|---|---|---|
| Markdown templates (legacy) | .md | Pre-fills the issue body; no enforcement |
| Issue forms (modern) | .yml | Structured fields; can mark fields as required; renders validated UI |
Issue Form Structure (YAML)
Key top-level keys in an issue form file:
name: Bug Report
description: File a bug report
title: "[Bug]: "
labels: ["bug"]
assignees: ["octocat"]
body:
- type: input
id: title
attributes:
label: Short description
validations:
required: true
- type: dropdown
- type: textarea
- type: checkboxes
Field types: input, textarea, dropdown, checkboxes, markdown (display-only)
required: true under validations prevents form submission if the field is empty. The markdown type cannot be marked required (it is display-only).
A special file .github/ISSUE_TEMPLATE/config.yml controls whether blank issues are allowed (blank_issues_enabled: true/false) and can add external links to the template chooser.
Common traps
- Issue forms use
.ymlextension; Markdown templates use.md— mixing them up is a frequent distractor. - Setting
blank_issues_enabled: falseinconfig.ymlforces users through templates but requires at least one template to exist. assigneesandlabelsin the form YAML auto-apply on creation; users can still modify them.- The
markdownfield type renders informational text but cannot be required.
Unlock with a paid plan
12 more sections (about 2,817 words) continue below. Every paid plan unlocks all GH-900 study guides, the full question bank and mock exams, from $4.97/month.