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
- Open a repo where you have
origin pointing at the upstream repository.
- Open a pull request from a fork (i.e.
head.repo.owner != base.repo.owner) in the Pull Requests view.
- Use "Checkout Pull Request in Worktree".
- Observe the notification:
Failed to create worktree: Failed to execute git.
- 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.
Bug
"Checkout Pull Request in Worktree" fails with a generic
Failed to create worktree: Failed to execute giterror whenever the pull request comes from a fork.Root cause
checkoutPRInWorktreeinsrc/github/worktree.tsalways fetches the PR's head branch from the base repo's remote:pullRequestModel.remoteis the remote for the repository the PR was opened against (typicallyorigin). For a PR opened from a fork, the head branch only exists on the fork's remote/clone URL, not onorigin, so the fetch fails with something like: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.fetchAndCheckoutdetectsisFork(pull.head.repositoryCloneUrl.owner !== pull.base.repositoryCloneUrl.owner) and, when true, callscheckoutFromFork, 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
originpointing at the upstream repository.head.repo.owner != base.repo.owner) in the Pull Requests view.Failed to create worktree: Failed to execute git.Git.log, the actual command run is: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
Fix
I have a small fix ready and will open a PR shortly that mirrors the existing fork-detection logic from
PullRequestGitHelper.fetchAndCheckout/checkoutFromForkinsidecheckoutPRInWorktree.