Work with GitHub in VS Code

Visual Studio Code provides several ways to work with repositories, pull requests, and issues on GitHub. Basic GitHub authentication and Git operations are built into VS Code. Extensions add pull request, issue, and virtual repository workflows.

This article helps you choose the right GitHub integration and use it without leaving VS Code.

Tip

If you're new to source control or want to learn more about VS Code's basic Git support, you can start with the Source Control topic.

Choose a GitHub workflow

Choose an integration based on what you want to do:

Goal Capability Requirement
Clone, fetch, pull, and push a repository Built-in Git support Install Git and sign in to GitHub when prompted.
Create and review pull requests or manage issues GitHub Pull Requests and Issues extension Install the extension and sign in to GitHub.
Browse and edit a repository without cloning it GitHub Repositories extension Install the extension and sign in to GitHub.

The GitHub Pull Requests and Issues and GitHub Repositories extensions are separate. Install only the extension that supports your workflow.

Prerequisites

For local GitHub repositories, install Git version 2.0.0 or later and create a GitHub account.

When you commit changes, Git uses your configured username and email. Set these values with:

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

Sign in to GitHub for Git operations

You don't need an extension to authenticate Git operations with GitHub. When you clone a private repository or push to a GitHub repository, VS Code prompts you to sign in. Follow the browser prompts, then return to VS Code.

Screenshot showing the GitHub authentication prompt in VS Code.

Personal access token authentication is supported for GitHub Enterprise Server. To use a personal access token, cancel the browser sign-in prompts until VS Code asks for a token. For other authentication options, see GitHub authentication methods.

Get started with GitHub Pull Requests and Issues

After you install the GitHub Pull Requests and Issues extension, sign in to use pull request and issue features.

  1. Select the GitHub icon in the Activity Bar.

  2. Select Sign In and follow the browser prompts.

    Screenshot showing the sign-in button in the GitHub view.

  3. Return to VS Code when authentication is complete.

If you are not redirected to VS Code, you can add your authorization token manually:

  1. In the browser window, copy your authorization token.

  2. In VS Code, select Signing in to github.com... in the Status Bar.

  3. Paste the token and press Enter to complete the sign-in process.

Setting up a repository

Cloning a repository

You can search for and clone a repository from GitHub using the Git: Clone command in the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) or by using the Clone Repository button in the Source Control view (available when you have no folder open).

From the GitHub repository dropdown you can filter and pick the repository you want to clone locally.

Screenshot showing the GitHub repository Quick Pick filtered on microsoft/vscode.

Learn more about cloning repositories and working with remotes.

Note

If you'd like to work on a repository without cloning the contents to your local machine, you can install the GitHub Repositories extension to browse and edit directly on GitHub. Learn more about the GitHub Repositories extension.

Editor integration

Hovers

When you have a repository open and a user is @-mentioned (for example, in a code comment), you can hover over that username and see a GitHub-style hover with the user's details.

Screenshot showing a user hover for a @-mentioned user in a code comment.

There is a similar hover for #-mentioned issue numbers, full GitHub issue URLs, and repository specified issues.

Screenshot showing a hover for a #-mentioned issue number in a code comment.

Suggestions

User suggestions are triggered by typing the "@" character and issue suggestions are triggered by typing the "#" character. Suggestions are available in the editor and in the Source Control commit message input box.

Screenshot showing GitHub user and issue suggestions in the editor.

The issues that appear in the suggestion can be configured with the GitHub Issues: Queries ( githubIssues.queries Open in VS Code Open in VS Code Insiders ) setting. The queries use the GitHub search syntax.

You can also configure which file types show these suggestions by using the settings GitHub Issues: Ignore Completion Trigger ( githubIssues.ignoreCompletionTrigger Open in VS Code Open in VS Code Insiders ) and GitHub Issues: Ignore User Completion Trigger ( githubIssues.ignoreUserCompletionTrigger Open in VS Code Open in VS Code Insiders ). These settings take an array of language identifiers to specify the file types.

// Languages that the '#' character should not be used to trigger issue completion suggestions.
"githubIssues.ignoreCompletionTrigger": [
  "python"
]

Pull requests

From the Pull Requests view you can view, manage, and create pull requests.

Screenshot showing the Pull Request view.

The queries used to display pull requests can be configured with the GitHub Pull Requests: Queries ( githubPullRequests.queries Open in VS Code Open in VS Code Insiders ) setting and use the GitHub search syntax.

"githubPullRequests.queries": [
    {
        "label": "Assigned To Me",
        "query": "is:open assignee:${user}"
    },

Creating pull requests

Once you have committed changes to your fork or branch, you can use the GitHub Pull Requests: Create Pull Request command or the Create Pull Request button in the Pull Requests view to create a pull request.

Screenshot showing the Create Pull Request button in the Pull Request view.

A new Create view will be displayed where you can select the base repository and base branch you'd like your pull request to target as well as fill in the title and description. If your repository has a pull request template, this will automatically be used for the description.

Use the buttons in the action bar at the top to add Assignees, Reviewers, Labels and a Milestone.

Screenshot showing the Create Pull Request view.

The Create button menu provides alternative options, such as Create Draft and Auto-Merge.

Once you select Create, if you have not already pushed your branch to a GitHub remote, the extension will ask if you'd like to publish the branch and provides a dropdown to select the specific remote.

The Create Pull Request view now enters Review Mode, where you can review the details of the PR, add comments, and merge the PR once it's ready. After the PR is merged, you'll have the option to delete both the remote and local branch.

Tip

Use AI to generate a PR title and description, based on the commits that are included in the PR. Select the sparkle icon next to the PR title field to generate a PR title and description.

Reviewing

Pull requests can be reviewed from the Pull Requests view. You can assign reviewers and labels, add comments, approve, close, and merge all from the pull request Description.

Screenshot showing a pull request description in the editor.

From the Description page, you can also easily checkout the pull request locally using the Checkout button. This will switch VS Code to open the fork and branch of the pull request (visible in the Status Bar) in Review Mode and add a new Changes in Pull Request view from which you can view diffs of the current changes as well as all commits and the changes within these commits. Files that have been commented on are decorated with a diamond icon. To view the file on disk, you can use the Open File inline action.

Screenshot showing files and commits in the Changes in Pull Request view.

The diff editors from this view use the local file, so file navigation, IntelliSense, and editing work as normal. You can add comments within the editor on these diffs. Both adding single comments and creating a whole review is supported.

When you are done reviewing the pull request changes you can merge the PR or select Exit Review Mode to go back to the previous branch you were working on.

Tip

You can also use AI to perform a code review of the PR before you create it. Select the Code Review button in the GitHub Pull Request view.

Issues

Creating issues

Issues can be created from the + button in the Issues view and by using the GitHub Issues: Create Issue from Selection and GitHub Issues: Create Issue from Clipboard commands. They can also be created using a Code Action for "TODO" comments. When creating issues, you can take the default description or select the Edit Description pencil icon in the upper right to bring up an editor for the issue body.

Screenshot showing an issue created from a TODO comment.

You can configure the trigger for the Code Action using the GitHub Issues: Create Issue Triggers ( githubIssues.createIssueTriggers Open in VS Code Open in VS Code Insiders ) setting.

The default issue triggers are:

"githubIssues.createIssueTriggers": [
  "TODO",
  "todo",
  "BUG",
  "FIXME",
  "ISSUE",
  "HACK"
]

Working on issues

From the Issues view, you can see your issues and work on them.

Screenshot showing an issue and its details in the Issues view.

By default, when you start working on an issue (Start Working on Issue context menu item), a branch will be created for you, as shown in the Status Bar in the image below.

Screenshot showing an active issue and its branch in the Status Bar.

The Status Bar also shows the active issue and if you select that item, a list of issue actions are available such as opening the issue on the GitHub website or creating a pull request.

Screenshot showing actions for the active issue in the Status Bar.

You can configure the name of the branch using the GitHub Issues: Issue Branch Title ( githubIssues.issueBranchTitle Open in VS Code Open in VS Code Insiders ) setting. If your workflow doesn't involve creating a branch, or if you want to be prompted to enter a branch name every time, you can skip that step by turning off the GitHub Issues: Use Branch For Issues ( githubIssues.useBranchForIssues Open in VS Code Open in VS Code Insiders ) setting.

Tip

Learn more about working with branches to understand branch management, switching between branches, and organizing your development work.

Once you are done working on the issue and want to commit a change, the commit message input box in the Source Control view will be populated with a message, which can be configured with GitHub Issues: Working Issue Format SCM ( githubIssues.workingIssueFormatScm Open in VS Code Open in VS Code Insiders ).

GitHub Repositories extension

The GitHub Repositories extension lets you browse, search, edit, and commit to a remote GitHub repository without cloning it locally. Use this workflow to review source code or make a small change to a file.

Screenshot showing a remote repository opened with the GitHub Repositories extension.

Opening a repository

After you install the GitHub Repositories extension, open a repository with the GitHub Repositories: Open Repository... command from the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) or by selecting the Remote indicator in the lower-left corner of the Status Bar.

Screenshot showing the Remote indicator in the Status Bar.

When you run the Open Repository command, you then choose whether to open a repository from GitHub, open a Pull Request from GitHub, or reopen a repository that you had previously connected to.

If you haven't logged into GitHub from VS Code before, you'll be prompted to authenticate with your GitHub account.

Screenshot showing the repository picker for the GitHub Repositories extension.

You can provide the repository URL directly or search GitHub for the repository you want by typing in the text box.

After you select a repository or pull request, VS Code reloads the window and shows the repository contents in the Explorer view. You can open files with syntax highlighting and bracket matching, make edits, and commit changes as you would in a local clone.

One difference from working with a local repository is that when you commit a change with the GitHub Repository extension, the changes are pushed directly to the remote repository, similar to if you were working in the GitHub web interface.

Another feature of the GitHub Repositories extension is that every time you open a repository or branch, you get the up-to-date sources available from GitHub. You don't need to remember to pull to refresh as you would with a local repository.

The GitHub Repositories extension supports viewing and even committing LFS-tracked files without needing to install Git LFS (Large File System) locally. Add the file types you want tracked with LFS to a .gitattributes file, then commit your changes directly to GitHub using the Source Control view.

Switching branches

Select the branch indicator in the Status Bar to switch branches. You don't need to stash uncommitted changes first because the extension remembers your changes and reapplies them when you return to the branch.

Screenshot showing the branch indicator in the Status Bar.

Remote Explorer

You can quickly reopen remote repositories with the Remote Explorer available on the Activity bar. This view shows you the previously opened repositories and branches.

Screenshot showing remote GitHub repositories in Remote Explorer.

Create pull requests

If your workflow uses Pull Requests, rather than direct commits to a repository, you can create a new PR from the Source Control view. You'll be prompted to provide a title and create a new branch.

Screenshot showing the Create Pull Request button in the Source Control view.

Once you have created a Pull Request, you can use the GitHub Pull Request and Issues extension to review, edit, and merge your PR as described earlier in this topic.

Virtual file system

Without a repository's files on your local machine, the GitHub Repositories extension creates a virtual file system in memory so you can view file contents and make edits. Using a virtual file system means that some operations and extensions which assume local files are not enabled or have limited functionality. Features such as tasks, debugging, and integrated terminals are not enabled and you can learn about the level of support for the virtual file system via the features are not available link in the Remote indicator hover.

Screenshot showing unavailable virtual workspace features in the Remote indicator hover.

Extension authors can learn more about running in a virtual file system and workspace in the Virtual Workspaces extension author's guide.

Continue working on

Sometimes you'll want to switch to working on a repository in a development environment with support for a local file system and full language and development tooling. The GitHub Repositories extension makes it easy for you to:

To switch development environments, use the Continue Working On command from the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) or select the Remote indicator in the Status Bar.

Screenshot showing development environment options for the Continue Working On command.

If you are using the browser-based editor, the Continue Working On command has the options to open the repository locally or within a cloud-hosted environment in GitHub Codespaces.

Screenshot showing Continue Working On options in the browser-based editor.

The first time that you use Continue Working On with uncommitted changes, you will have the option to bring your edits to your selected development environment using Cloud Changes, which stores your pending changes on the same VS Code service used for Settings Sync.

These changes are deleted from our service once they are applied to your target development environment. If you choose to continue without your uncommitted changes, you can always change this preference later by configuring the setting "workbench.cloudChanges.continueOn": "prompt".

In the event that your pending changes are not automatically applied to your target development environment, you can view, manage, and delete your stored changes using the Cloud Changes: Show Cloud Changes command.

Next steps