Skip to content
X

GitHub Issues - Task & Bug Management

GitHub Issues is a feature for recording and tracking tasks, bugs, questions, and ideas in a project. Think of it as a shared to-do list where your team can see “what needs to be done” and “what problems exist” in one place.


Issues is the built-in ticket management system in a GitHub repository. Each issue corresponds to one task or problem.

Common uses include:

  • Reporting a bug: “The login button doesn’t work”
  • Logging a feature request: “I want to add a search feature”
  • Creating a work task: “Research how to implement X”
  • Asking the team: “Is this the right architecture for this?”

The main reason to use Issues is to prevent work from falling through the cracks and ensure everyone on the team is working from the same information.

Conversations in email or chat disappear over time, but anything recorded in Issues can be searched and found later. You can also clearly show who is responsible for something and which release it targets.


Open the “Issues” tab in your repository and click “New issue”.

FieldDescriptionExample
TitleA concise summary of the problem or taskLogin button doesn't work in certain browsers
DescriptionDetailed information, reproduction steps, expected behaviorSee templates below
LabelsTags that classify the type of issuebug, enhancement, etc.
AssigneesThe person responsible for this issue@yamada
MilestoneLink to a release version or deadlinev1.2.0
ProjectsThe project board this issue belongs toSprint 3

A good title makes it immediately clear “what the problem is” or “what needs to be done”.

RatingExampleWhy
GoodLogin form cannot be submitted on iOS SafariOS, browser, and symptom are all clear
GoodAdd user search featureThe task is clear
BadBugDoesn’t explain what bug
BadFixDoesn’t explain what to fix

Labels are color-coded tags that classify issues. When scanning a list, they let you see at a glance what kind of issues exist.

LabelMeaning
bugSomething isn’t working
enhancementA new feature or improvement
documentationDocumentation fixes or additions
good first issueA good issue for newcomers to tackle
help wantedExtra attention or collaboration is needed
questionA question or discussion
wontfixThis won’t be worked on
duplicateA duplicate of another issue
invalidAn invalid or unconfirmed report

You can create custom labels that fit your team’s workflow. Here are some common examples:

Custom LabelMeaning
priority: highHigh priority
priority: lowLow priority
area: frontendFrontend-related
area: backendBackend-related
status: blockedBlocked waiting on another issue
type: refactorCode refactoring

Go to “Issues” → “Labels” → “New label” to create one.


A milestone groups issues together toward a specific release or deadline.

For example, create a milestone called v1.0.0 Release and attach all the issues that need to be resolved for that version. GitHub will display your progress as a percentage.

  1. Go to “Issues” → “Milestones”
  2. Click “New milestone”
  3. Enter a title (e.g. v1.0.0), a due date, and a description
  4. Click “Create milestone”

Issues can be closed in two ways:

Click the “Close issue” button at the bottom of the issue page.

If you include one of the following keywords followed by an issue number in the PR title or body, the issue will automatically close the moment the PR is merged.

Closes #123
Fixes #456
Resolves #789

For example, writing Closes #42 in a PR description will automatically close Issue #42 when the PR merges. This removes the need to manually close issues after finishing work.


If you want bug reports or feature requests to follow a consistent format, you can create templates. Templates help reporters include all the necessary information.

Create .github/ISSUE_TEMPLATE/bug_report.md:

---
name: Bug Report
about: Use this template to report a bug
labels: bug
---

## What Is Happening

<!-- Briefly describe the problem -->

## Steps to Reproduce

1. Open the page at ...
2. Click ...
3. Error occurs

## Expected Behavior

<!-- What should happen instead? -->

## Actual Behavior

<!-- What actually happens? -->

## Environment

- OS: macOS 14.x / Windows 11 / Ubuntu 22.04
- Browser: Chrome 120 / Firefox 121 / Safari 17
- App version: v1.2.3

## Screenshots

<!-- Attach images if available -->

Create .github/ISSUE_TEMPLATE/feature_request.md:

---
name: Feature Request
about: Use this template to propose a new feature or improvement
labels: enhancement
---

## Feature Proposal

<!-- Describe the feature or improvement you're proposing -->

## Problem This Solves

<!-- Explain what problem you're running into without this feature -->

## Proposed Solution

<!-- If you have ideas on how to implement it, share them here -->

## Alternatives

<!-- Are there other ways to solve the same problem? -->

  1. QA team finds a bug → Creates an issue with the bug label
  2. Assign the responsible engineer (add to Assignees)
  3. Engineer creates a fix branch and writes Fixes #42 in the PR description
  4. When the PR merges, Issue #42 is automatically closed
  5. QA team runs a regression test to confirm the fix
  1. Create a Sprint 5 milestone at the start of a sprint
  2. Link the sprint’s issues to the milestone
  3. Visualize progress on a kanban board using Projects (GitHub Projects)
  4. Check the milestone close rate at the end of the sprint
  1. Find an issue labeled good first issue
  2. Leave a comment saying you’ll work on it
  3. Fork the repo, create a branch, and make your fix
  4. Send a PR with Closes #<issue number> in the description

In public repositories, anyone with a GitHub account can create issues. Private repositories require access to the repository.

Q. How much should I write in the issue description?

Section titled “Q. How much should I write in the issue description?”

For bug reports, the minimum is: reproduction steps, expected behavior, actual behavior, and environment info. Screenshots or videos make it even clearer.

Q. I have too many issues and it’s getting hard to manage.

Section titled “Q. I have too many issues and it’s getting hard to manage.”

Use labels and milestones to organize them. It also helps to periodically review old issues and close ones you won’t address by adding the wontfix label.

Q. I wrote Closes #123 but the issue didn’t close.

Section titled “Q. I wrote Closes #123 but the issue didn’t close.”

Auto-close only triggers when the PR is merged into main (or the default branch). It won’t fire when merging into other branches. Also check for typos in the keyword (Close vs Closes) and make sure the issue number is correct.

Q. A duplicate issue was created. What should I do?

Section titled “Q. A duplicate issue was created. What should I do?”

Add the duplicate label to one of them, leave a comment like “This is a duplicate of Issue #XX”, and close it. Include a link to the original issue so anyone who finds it later knows where to go.