# 在本地检查拉取请求

在本地检出拉取请求，以解决合并冲突、测试变更或修改代码。

> \[!NOTE]
> 拉取请求作者可以授予上游仓库维护者或对上游仓库具有推送权限的人员权限，使其能够在用户拥有的派生仓库中，对该拉取请求的比较分支进行提交。 请参阅“[Allowing changes to a pull request branch created from a fork](/zh/pull-requests/how-tos/work-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork)”。

## 在本地修改活动的拉取请求

<div class="ghd-tool webui">

1. 在仓库名称下，单击 <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-git-pull-request" aria-label="git-pull-request" role="img"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg>“Pull requests”\*\*\*\*。

   ![存储库的主页的屏幕截图。 在水平导航栏中，标记为“拉取请求”的选项卡以深橙色标出。](/assets/images/help/repository/repo-tabs-pull-requests-global-nav-update.png)

2. 在拉取请求列表中，单击要修改的拉取请求。

3. 若要选择要打开拉取请求的位置，请选择 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-code" aria-label="code" role="img"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg> “代码** ”下拉列表，然后单击其中一个选项卡。

![拉取请求标题的屏幕截图。 带有表示下拉菜单的箭头、标有“代码”的按钮以深橙色描边。](/assets/images/help/pull_requests/open-with-button.png)

</div>

<div class="ghd-tool cli">

> \[!NOTE]
> 若要详细了解 GitHub CLI，请参阅“[关于 GitHub CLI](/zh/github-cli/github-cli/about-github-cli)”。

若要在本地检出拉取请求，请使用 `gh pr checkout` 子命令。 将 `PULL-REQUEST` 替换为拉取请求的数字、URL 或主分支。

```shell
gh pr checkout PULL-REQUEST
```

</div>

## 在本地修改非活动拉取请求

如果拉取请求的作者对请求无响应或已删除其分支，则请求请求中建议的更改仍可通过新的拉取请求进行合并。 但是，如果要进行更改，则需要采取其他步骤来更新拉取请求。

拉取请求打开后， GitHub 远程存储所有更改。 即使拉取请求尚未合并，拉取请求中的提交也已在仓库中可用。 您可以获取打开的拉取请求，并将其重建为自己的拉取请求。

任何人都可以使用以前打开的拉取请求，以继续处理请求、测试拉取请求，或者打开包含其他更改的新拉取请求。

1. 在仓库名称下，单击 <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-git-pull-request" aria-label="git-pull-request" role="img"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg>“Pull requests”\*\*\*\*。

   ![存储库的主页的屏幕截图。 在水平导航栏中，标记为“拉取请求”的选项卡以深橙色标出。](/assets/images/help/repository/repo-tabs-pull-requests-global-nav-update.png)

2. 在 **“拉取请求** ”列表中，单击要合并的拉取请求。

3. 找到非活动拉取请求的 ID 号。 这是拉取请求标题后面的数字序列。

   ![拉取请求标题的屏幕截图。 拉取请求的 ID 编号以深橙色标出。](/assets/images/help/pull_requests/pull-request-id-number.png)

4. 打开终端或 Git Bash。

5. 根据其 ID 编号获取拉取请求的引用。 这会创建新的分支。 使用拉取请求 ID 和要在命令中创建的本地分支的名称。

   ```shell
   git fetch origin pull/ID/head:BRANCH_NAME
   ```

6. 切换到基于此 Pull Request 的新分支：

   ```shell
   [main] $ git switch BRANCH_NAME
   > Switched to a new branch 'BRANCH_NAME'
   ```

7. 对此分支进行任何必要的更改。 可以运行本地测试或将其他分支合并到分支中。

8. 准备就绪后，推送新分支：

   ```shell
   [pull-inactive-pull-request] $ git push origin BRANCH_NAME
   > Counting objects: 32, done.
   > Delta compression using up to 8 threads.
   > Compressing objects: 100% (26/26), done.
   > Writing objects: 100% (29/29), 74.94 KiB | 0 bytes/s, done.
   > Total 29 (delta 8), reused 0 (delta 0)
   > To https://github.com/USERNAME/REPOSITORY.git
   >  * [new branch]      BRANCH_NAME -> BRANCH_NAME
   ```

9. 用你的新分支创建新的拉取请求。

## 错误：无法推送某些 ref

远程 `refs/pull/` 命名空间是只读的。 如果尝试在那里推送提交，将看到此错误：

```shell
! [remote rejected] HEAD -> refs/pull/1/head (deny updating a hidden ref)
error: failed to push some refs to 'git@github.local:USERNAME/REPOSITORY.git'
```

> \[!TIP]
> 删除或重命名远程引用时，调用 `git-remote` 不会影响本地 `refs/pull/origin/` 命名空间。