GitHub Collaboration Tools: Issues, Pull Requests, Discussions, Notifications and Pages (GH-900)
GitHub's collaboration tools are the features a team uses to plan, discuss, review and document work around a repository: issues track actionable work, pull requests propose and review code changes, discussions host open-ended conversation, and gists, wikis and GitHub Pages share information. This lesson covers the GitHub Foundations (GH-900) collaboration skills: choosing between issues, pull requests and discussions; linking pull requests to issues; templates, search filters and assignees; configuring notifications; and when to use a gist, a wiki or a Pages site.
On this page10 sections
- Issues, pull requests and discussions: which one to use
- Discussions: categories, formats and moderation
- Pull request reviews and suggested changes
- Linking pull requests to issues with closing keywords
- Linking manually from the Development sidebar
- Issue and pull request templates
- Filtering issues and pull requests, and assigning owners
- Notifications: watching, subscriptions and the inbox
- Gists: sharing snippets
- Wikis and GitHub Pages: documenting and publishing
- Choose between an issue, a pull request and a discussion for a piece of collaboration, and use discussion categories, pinning and issue-to-discussion conversion
- Submit pull request reviews with the right state and propose suggested changes the author can commit
- Link pull requests to issues with closing keywords or the Development sidebar, and predict when the issue closes
- Configure issue templates, config.yml, pull request templates and organization-wide default templates
- Filter issues and pull requests with search qualifiers and assign owners
- Configure watch levels, triage the notifications inbox and route notification email
- Decide when to use a gist, a wiki or a GitHub Pages site, including their visibility rules
Issues, pull requests and discussions: which one to use
Use an issue for actionable work that should be owned and closed, a pull request to propose and review a specific code change, and a discussion for open-ended conversation that may never become work. All three live in a repository, support Markdown, @mentions and reactions, and cross-reference each other with #number.
| Issue | Pull request | Discussion | |
|---|---|---|---|
| Purpose | Track a bug, task or feature request to closure | Propose changes from one branch into another and review them | Questions, ideas, announcements, polls, community conversation |
| Ownership | Assignees (up to ten) | Assignees plus requested reviewers | No assignees |
| Planning | Labels, milestones, projects, issue types | Labels, milestones, projects | Categories and labels |
| How it ends | Closed (completed, not planned or duplicate), often automatically by a merged pull request | Merged or closed | Can stay open; a Q&A discussion can have a marked answer |
The deciding question is whether there is concrete work with an owner and an end. A defect that needs someone to fix it and should close when the fix merges is an issue. "How do I configure this?" or "should we redesign the plugin system?" is a discussion until the community agrees on work.
Discussions: categories, formats and moderation
GitHub Discussions is a forum attached to a repository (or an organization), organised into categories; each category has a format that controls how threads behave. Maintainers enable Discussions in the repository settings and manage the categories.
| Category format | What it does |
|---|---|
| Open-ended discussion | General conversation; anyone who can participate can start a thread |
| Question and answer | A comment can be marked as the answer, so future readers find the best reply at the top |
| Announcement | Only people with maintain or admin permission can create new discussions; everyone can still comment and reply |
| Poll | The thread is a poll the community votes on |
Other discussion tools: pinning a discussion gives it extra visibility at the top of the Discussions page, labels help sort threads, and moderators can lock, edit or delete. Discussions and issues convert in both directions: people with triage access can convert an issue into a discussion (the conversation and comments move with it, and the issue backlog keeps only actionable work), and an issue can be created from a discussion once it turns into concrete work.
What discussions do not have is the work-tracking machinery of issues: no assignees, no milestones, and no closing keywords — a merged pull request cannot close a discussion.
Pull request reviews and suggested changes
A pull request review is a set of comments submitted together with one of three states: Comment, Approve or Request changes. The state is what tells the author (and any branch protection rules) where the change stands.
| Review state | Meaning |
|---|---|
| Comment | General feedback without explicitly approving or blocking |
| Approve | The reviewer agrees the change can be merged |
| Request changes | Feedback that must be addressed before the pull request is merged |
Reviewers can comment on a specific line or range of lines. Inside a line comment, a suggested change (a suggestion block) proposes the exact replacement text; the author can commit the suggestion to the branch from the pull request page, one at a time or several in a batch, without retyping it. A plain line comment that describes the fix still leaves the edit to the author.
A draft pull request signals work in progress: it cannot be merged and code owners are not automatically asked to review it until it is marked ready. Requesting reviewers, CODEOWNERS and branch protection are covered with repository administration in other GH-900 lessons.
Linking pull requests to issues with closing keywords
A closing keyword followed by an issue reference in a pull request's description links the pull request to that issue and closes the issue automatically when the pull request is merged into the repository's default branch. The supported keywords are close, closes, closed, fix, fixes, fixed, resolve, resolves and resolved; they are case-insensitive and a colon after the keyword is optional (Fixes #42 and Fixes: #42 both work). Words such as "refs", "tracks" or "relates to" only create a cross-reference on the issue's timeline.
The rules that trip people up:
- Default branch only. If the pull request targets any other branch (for example
release-2.0), the keywords are ignored: no link is created and merging does not close the issue. - One keyword per issue. To close several issues, repeat the full syntax:
Resolves #10, resolves #123. A comma list after a single keyword closes only the first issue. - Other repositories need the full reference. An issue in another repository is written
OWNER/REPOSITORY#NUMBER, for exampleFixes octo-org/web#12. A bare#12always means the pull request's own repository, and the repository name without the owner is not enough. - Commit messages close, but don't link. A closing keyword in a commit message closes the issue when that commit reaches the default branch, but the pull request containing the commit is not listed as a linked pull request. Put the keyword in the pull request description to get both the link and the closure.
Once linked, the pull request appears in the issue's Development section, and the issue appears on the pull request, so anyone can see what work is in flight for an issue.
Issue and pull request templates
Templates pre-fill new issues and pull requests so contributors give maintainers the information they need. They take effect only once they are committed to the repository's default branch.
Issue templates
Markdown files in .github/ISSUE_TEMPLATE/ make the New issue page show a template chooser (for example, a bug report and a feature request). Each Markdown template starts with YAML front matter: name and about describe it in the chooser, and title, labels, assignees and type are applied automatically to every issue opened from it. YAML issue forms, with typed fields, also go in this folder (they are a public preview feature).
A config.yml file in the same folder customises the chooser:
blank_issues_enabled: falsediscourages blank issues (people with write, maintain or admin access still see an option to open one);trueleaves the blank option for everyone.contact_linksentries (name,url,about) send people elsewhere — for example support questions to a community forum — straight from the New issue page.
Pull request templates
A file named pull_request_template.md in the repository root, the docs/ folder or the .github/ folder pre-fills the body of every new pull request (a checklist is a common use). For several templates, put them in a PULL_REQUEST_TEMPLATE/ subfolder and choose one with the template query parameter.
Defaults for every repository
An organization or personal account can provide default community health files, including issue and pull request templates, from a public repository named .github. A repository uses a default only when it has no file of that type of its own, and issue templates do not merge: a repository with anything in its own ISSUE_TEMPLATE folder uses none of the defaults.
Filtering issues and pull requests, and assigning owners
The search bar on the Issues and Pull requests tabs takes qualifiers that combine with spaces (AND) and can be negated with a leading -. Knowing which qualifier expresses which relationship is the skill.
| Qualifier | Finds |
|---|---|
is:issue / is:pr | Only issues or only pull requests |
is:open / is:closed / is:draft | State; is:draft finds draft pull requests |
label:bug / no:label | Items with that label / with no label at all |
author:USER | Items the user opened |
assignee:USER, assignee:@me / no:assignee | Items assigned to someone (or you) / items nobody owns |
no:milestone | Items not scheduled into a milestone |
review-requested:USER | Pull requests waiting for that user's review |
reviewed-by:USER | Pull requests the user has already reviewed |
mentions:USER / involves:USER | Items mentioning the user / involving them in any way |
linked:pr | Issues that have a linked pull request |
For example, is:issue is:open label:docs no:assignee lists open documentation issues nobody has taken, and is:pr review-requested:octocat lists pull requests still waiting on Octocat.
Assignees show who owns an issue or pull request. You can assign up to ten people to one item — yourself, anyone who has commented on it, anyone with write permission to the repository, and organization members with read permission. Assignment is different from an @mention (which only notifies) and from requesting a review (which applies to pull requests and asks for feedback, not ownership). Labels, milestones, saved replies and Projects are covered in the GH-900 project-management lesson.
Notifications: watching, subscriptions and the inbox
Notifications tell you about activity you care about; you control their volume by choosing what you subscribe to and how they are delivered. Each repository has a Watch setting:
| Watch level | You are notified about |
|---|---|
| Participating and @mentions | Only threads you take part in, are @mentioned in, or are assigned or review-requested on (the default) |
| All Activity | Every new issue, pull request, discussion and comment in the repository |
| Ignore | Nothing from the repository — not even @mentions |
| Custom | Participating and @mentions plus the event types you select: Issues, Pull requests, Releases, Security alerts, Discussions |
To hear only about new versions of a library you use, watch it with Custom and select only Releases. To quiet a busy repository while still hearing about mentions and threads you joined, choose Participating and @mentions — Ignore goes too far. Starring a repository bookmarks it and shows appreciation; it is not a notification setting. You can also subscribe to (or unsubscribe from) a single issue, pull request or discussion from its sidebar without changing the repository's watch level.
Triage in the inbox
The notifications inbox (github.com/notifications) is where you work through them:
- Done clears a notification from the inbox; Unsubscribe also stops future notifications from that thread.
- Save keeps a notification indefinitely so you can return to it (find it with
is:saved); unsaved notifications are kept for five months. Marking read or unread changes only its read state. - Filters narrow the list, for example
reason:participating,reason:review-requestedorrepo:, and you can save custom filters.
Delivery
Notifications can be delivered on the web, in GitHub Mobile and by email; you choose channels per type of activity. With custom routing you send email notifications for repositories owned by a particular organization to a different verified address — for example, employer repositories to a work address and everything else to a personal one (an organization can require an address in its verified domain).
Gists: sharing snippets
A gist is a lightweight way to share code snippets, notes or small files by URL without creating a full repository. Every gist is a Git repository, so it keeps a revision history of each edit and can be cloned and forked; a gist can contain several files, and it can be embedded in a web page.
| Public gist | Secret gist | |
|---|---|---|
| Listed in Discover and searchable | Yes | No |
| Who can view it | Anyone | Anyone with the URL, signed in or not |
| Change visibility | Cannot be made secret | Can later be made public |
Secret gists are not private. They are only unlisted. Content that must stay hidden — such as credentials — belongs in a private repository, and any secret that was ever posted in a gist should be rotated. Gists are edited by their owner; others contribute by forking.
Wikis and GitHub Pages: documenting and publishing
Use a repository wiki for longer documentation that sits with the code, and GitHub Pages for a published website. A wiki holds supplementary documentation — usage guides, design principles, how the project is organised — alongside the code. The README stays the short "what is this and how do I start" page; the wiki is where the detail goes. A wiki is itself a Git repository that can be cloned and edited locally. Wikis are available in public repositories on every plan, and in private repositories on paid plans.
- Who can edit: by default, people with write access to the repository. For a public repository, clearing Restrict editing to collaborators only (under Features in the repository settings) lets anyone with a GitHub account edit — no need to hand out write access to the code.
- Search engines: a wiki is indexed only when the repository has 500 or more stars and wiki editing is restricted to collaborators. Both conditions must hold. For documentation that must be found by search engines, GitHub recommends a GitHub Pages site.
GitHub Pages
GitHub Pages hosts a static website (HTML, CSS, JavaScript) straight from a repository — common for project documentation, personal sites and handbooks. It does not run server-side code.
- Site types: a user or organization site is published from a repository named exactly
<owner>.github.ioand served athttps://<owner>.github.io(one per account). Any other repository publishes a project site athttps://<owner>.github.io/<repository>. Custom domains are supported. - Publishing source: either Deploy from a branch — the root or
/docsfolder of a chosen branch, with an optional Jekyll build — or GitHub Actions, where a workflow builds the site and deploys it as a Pages artifact. Use Actions for any other static site generator (Hugo, for example) or when you don't want a branch of compiled files. - Visibility: a Pages site is public on the internet even when its repository is private (publishing from a private repository needs a paid plan). Restricting a site so only organization members can view it — private publishing — requires an organization on GitHub Enterprise Cloud.
| Need | Best fit |
|---|---|
| Share one script or snippet by link, with history | Gist |
| Longer docs beside the code, editable in the browser | Wiki |
| A public website or search-indexed documentation | GitHub Pages |
Tip. Most items are short scenarios that ask you to pick the right tool or setting. Expect to choose between near-twins: an issue or a discussion, the Q&A or Announcement category format, Comment or Request changes, review-requested: or reviewed-by:, Participating and @mentions or Ignore, Save or Done, blank_issues_enabled false or true, a secret gist or a private repository, a private repository or a privately published Pages site. Linking items check the exact closing-keyword syntax and the conditions under which an issue closes (default branch, one keyword per issue, OWNER/REPO#N, commit message versus description) and which Development sidebar can reach another repository. Template items ask where files go and how organization defaults apply. Harder items combine two rules, and a few are select-TWO; read every stated constraint, such as not editing the description or still wanting @mentions.
- Issues are for actionable work with an owner and an end; discussions are for questions, ideas and announcements; pull requests propose and review a code change.
- Q&A discussion categories let a comment be marked as the answer; Announcement categories let only maintain/admin users start threads; people with triage access can convert an issue into a discussion.
- Reviews are submitted as Comment, Approve or Request changes; a suggested change on a line can be committed by the author from the pull request page.
- Closing keywords (close/fix/resolve forms) in a pull request description close issues only on merge into the default branch; repeat the keyword per issue and use OWNER/REPO#N for other repositories.
- A keyword in a commit message closes the issue but does not list the pull request as linked; manual links from the Development sidebar need write access, and only the issue side can reach another repository.
- Issue templates live in .github/ISSUE_TEMPLATE (config.yml sets blank_issues_enabled and contact_links); pull_request_template.md goes in the root, docs/ or .github/; a public .github repository supplies defaults only to repositories without their own.
- review-requested: finds pull requests waiting on a reviewer, reviewed-by: those already reviewed, and no:assignee finds unowned items; up to ten people can be assigned.
- Watch with Participating and @mentions to hear only what involves you, Custom to add event types such as Releases, and Ignore to drop everything; Save keeps a notification indefinitely.
- Secret gists are unlisted, not private: anyone with the URL can view them, and a public gist cannot be made secret.
- Wikis need 500+ stars and restricted editing to be indexed; GitHub Pages sites are public unless privately published from an Enterprise Cloud organization.
Frequently asked questions
When should I use a GitHub discussion instead of an issue?
Use a discussion for open-ended conversation — usage questions, early ideas, announcements or polls — and an issue for concrete work that needs an owner and should be closed when it is done. Discussions have no assignees, milestones or closing keywords, while issues can be assigned, planned and closed automatically by a merged pull request. An issue that turns out to be an unresolved idea can be converted into a discussion by someone with triage access.
Why didn't my issue close when the pull request was merged?
GitHub closes an issue from a closing keyword such as "Fixes #42" only when the pull request is merged into the repository's default branch; keywords in a pull request targeting any other branch are ignored. The other common causes are using a non-closing word such as "refs", listing several issues after one keyword (each issue needs its own keyword), or omitting OWNER/REPO for an issue in another repository.
How do I link a pull request to an issue in a different repository without editing the description?
Open the issue and use the Development section of its sidebar: choose the repository first, then the pull request or branch. You need write access. From the pull request's own Development sidebar you can only pick issues in the same repository, so cross-repository manual links must start from the issue.
Where do GitHub issue and pull request templates go?
Issue templates go in the .github/ISSUE_TEMPLATE folder, with an optional config.yml that turns off blank issues and adds contact links. A single pull request template is a pull_request_template.md file in the repository root, docs/ or .github/ folder, and several go in a PULL_REQUEST_TEMPLATE subfolder. Templates take effect once they are on the default branch, and an organization can supply defaults from a public repository named .github.
Are secret gists private?
No. A secret gist is only unlisted: it does not appear in Discover or search, but anyone who has its URL can view it without signing in. A secret gist can be made public later, but a public gist cannot be made secret. Anything that must stay confidential belongs in a private repository, and any credential posted in a gist should be rotated.
What is the difference between watching a repository with Participating and @mentions, Custom and Ignore?
Participating and @mentions notifies you only about threads you take part in or are mentioned, assigned or requested on. Custom adds selected event types — issues, pull requests, releases, security alerts or discussions — on top of that. Ignore turns off all notifications from the repository, including @mentions. All Activity notifies you about everything.
Is a GitHub Pages site private if its repository is private?
No. A GitHub Pages site is publicly accessible on the internet even when it is published from a private repository. Restricting a site so only members of an organization can view it requires an organization on GitHub Enterprise Cloud, where the site can be published privately.
Why isn't my GitHub wiki showing up in Google?
Search engines index a GitHub wiki only when the repository has 500 or more stars and wiki editing is restricted to collaborators; both conditions must be met. For documentation that needs to be found through search, GitHub recommends publishing it as a GitHub Pages site instead.
Source
This lesson covers the "Collaborate using GitHub" domain of the official GH-900 exam guide. Vendors revise their guides — check the source for the current version.
Sign up free to mark lessons complete, bookmark topics and track your exam readiness.