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.
Choose an integration below, or go directly to creating a pull request, reviewing a pull request, or working on an issue.
New to Git in the editor? Complete the source control quickstart before starting a collaboration workflow.
Choose a GitHub workflow
Choose an integration based on what you want to do:
| Goal | Capability | Requirement |
|---|---|---|
| Clone, fetch, pull, and push | Built-in Git support | Install Git and sign in when prompted. |
| Create and review pull requests or manage issues | GitHub Pull Requests and Issues extension | Install the extension and sign in. |
| Browse and edit without cloning | GitHub Repositories extension | Install the extension and sign in. Terminal, build, and debugging workflows require a different environment. |
The GitHub Pull Requests and Issues and GitHub Repositories extensions are separate. Install only the extension that supports your workflow.
Prerequisites
For a local checkout, install Git and configure your commit identity. To publish changes, create pull requests, or manage issues, you also need a hosting account.
Signing in does not grant write permission to every repository. If you can't push to the project, create a fork, work in your fork, and open a pull request to the original project.
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.

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.
-
Select the GitHub icon in the Activity Bar.
-
Select Sign In and follow the browser prompts.

-
Return to VS Code when authentication is complete.
If you are not redirected to VS Code, you can add your authorization token manually:
-
In the browser window, copy your authorization token.
-
In VS Code, select Signing in to github.com... in the Status Bar.
-
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.

Learn more about cloning repositories and working with remotes.
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.
Pull requests
Use the GitHub Pull Requests and Issues extension's Pull Requests view to create or review a proposed change.

Creating pull requests
-
Open your local repository, create a branch, and commit your changes.
-
Run GitHub Pull Requests: Create Pull Request from the Command Palette (⇧⌘P (Windows, Linux Ctrl+Shift+P)), or select Create Pull Request in the Pull Requests view.
-
In the Create view, select the base repository and branch that should receive your changes. Enter a title and description. If the repository has a pull request template, the extension fills in that template.

-
Select Create. If your branch isn't published, choose a remote you can push to, such as your fork, when prompted.
The extension opens the pull request in Review Mode. Verify the destination branch and changed files before requesting review.
Use the action bar to add Assignees, Reviewers, Labels, or a Milestone. For unfinished work, use Create Draft from the Create button menu. Other options, such as Auto-Merge, depend on repository support and your permissions.
Reviewing
-
Select a pull request in the Pull Requests view to open its Description.

-
To inspect and test the code locally, first commit or stash your current changes, then select Checkout.
The extension checks out the pull request branch and enters Review Mode. The Changes in Pull Request view lists the changed files and commits.

-
Select a file to inspect its diff and add comments. Use Open File to open the working file. Local navigation, IntelliSense, and editing are available in this checked-out workflow.
-
Submit your comments or review from the pull request Description. Approval and merge actions depend on your permissions and the repository's rules.
-
When finished, select Exit Review Mode to return to your previous branch. Preserve any local edits before switching.
Customize the pull request list
Configure githubPullRequests.queries to choose which pull requests the view shows. Queries use the GitHub search syntax.
For example, add this setting to your settings JSON file:
{
"githubPullRequests.queries": [
{
"label": "Assigned To Me",
"query": "is:open assignee:${user}"
}
]
}
Use AI assistance for pull requests
AI assistance is optional. To generate a pull request title and description, select the sparkle icon next to the title field, then review the generated text.
This action uses the utility model configured by chat.utilitySmallModel , not the model selected for a chat or agent session. See utility model setup and requirements.
You can also review proposed changes with AI before creating the pull request. Review the feature requirements in that guide and select Code Review 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.

You can configure the trigger for the Code Action using the GitHub Issues: Create Issue Triggers ( githubIssues.createIssueTriggers ) 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.

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.

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.

You can configure the name of the branch using the GitHub Issues: Issue Branch Title ( githubIssues.issueBranchTitle ) 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 ) setting.
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 ).
Editor integration
The GitHub Pull Requests and Issues extension also provides user and issue information while you edit.
Hovers
Hover over an @-mentioned username to see the user's details, or over an issue reference to see its details.

Suggestions
Type @ for user suggestions or # for issue suggestions in the editor or commit message input box.

Use githubIssues.queries to choose which issues appear. Queries use the GitHub search syntax.
To exclude languages from these suggestions, configure githubIssues.ignoreCompletionTrigger for issues or githubIssues.ignoreUserCompletionTrigger for users. Both accept language identifiers. For example:
{
"githubIssues.ignoreCompletionTrigger": ["python"]
}
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.
This is a virtual workspace, not a local checkout. To run terminal commands, build, or debug the project, continue in a local clone or another development environment.

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.

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.

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.

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.

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.

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.

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:
- Create a GitHub codespace (if you have the GitHub Codespaces extension).
- Clone the repository locally.
- Clone the repository into a Docker container (if you have Docker and the Microsoft Container Tools extension installed).
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.

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.

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
- Resolve merge conflicts when branches contain competing changes.
- Troubleshoot authentication and push failures when remote operations fail.
- Manage branches and worktrees for parallel pull request work.