Skip to content

Checkout Pull Request in Worktree fails for PRs from forks ("Failed to execute git") #8983

Description

Bug

"Checkout Pull Request in Worktree" fails with a generic Failed to create worktree: Failed to execute git error whenever the pull request comes from a fork.

Root cause

checkoutPRInWorktree in src/github/worktree.ts always fetches the PR's head branch from the base repo's remote:

const remoteName = pullRequestModel.remote.remoteName;
...
await repositoryToUse.fetch({ remote: remoteName, ref: branchName });

pullRequestModel.remote is the remote for the repository the PR was opened against (typically origin). For a PR opened from a fork, the head branch only exists on the fork's remote/clone URL, not on origin, so the fetch fails with something like:

fatal: couldn't find remote ref <branch-name>

That underlying git error isn't surfaced — it's swallowed into the generic "Failed to execute git" message shown to the user, which makes the bug very hard to diagnose without extension logs.

Note the extension's regular (non-worktree) checkout path already handles this correctly: PullRequestGitHelper.fetchAndCheckout detects isFork (pull.head.repositoryCloneUrl.owner !== pull.base.repositoryCloneUrl.owner) and, when true, calls checkoutFromFork, which creates (or reuses) a remote pointing at the fork's clone URL before fetching. The worktree checkout path bypasses all of this.

Repro steps

  1. Open a repo where you have origin pointing at the upstream repository.
  2. Open a pull request from a fork (i.e. head.repo.owner != base.repo.owner) in the Pull Requests view.
  3. Use "Checkout Pull Request in Worktree".
  4. Observe the notification: Failed to create worktree: Failed to execute git.
  5. In the Git output channel / Git.log, the actual command run is:
    > git fetch origin <fork-branch-name>
    fatal: couldn't find remote ref <fork-branch-name>
    

Expected behavior

Worktree checkout should succeed for fork PRs the same way regular checkout does, by fetching from a remote associated with the fork (creating one if necessary) instead of always using the base repo's remote.

Environment

  • GitHub Pull Requests extension (recent version, confirmed via extension logs on 2026-09-24)
  • VS Code Server (remote/SSH), Linux

Fix

I have a small fix ready and will open a PR shortly that mirrors the existing fork-detection logic from PullRequestGitHelper.fetchAndCheckout/checkoutFromFork inside checkoutPRInWorktree.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions