跳至主要内容

在本地签出 Pull Request

当有人从你的代码库的一个 fork 或分支向你发送一个 Pull Request 时,你可以在本地合并它以解决合并冲突,或在 GitHub 上合并之前测试和验证这些更改。

谁可以使用此功能?

任何具有对代码库的写访问权限的人都可以将远程 Pull Request 本地拉取下来。

平台导航

注意:Pull Request 作者可以授予上游代码库维护者或具有对上游代码库的推送访问权限的人员权限,让他们可以在用户拥有的 fork 中对 Pull Request 的比较分支进行提交。有关更多信息,请参阅“允许对从 fork 创建的 Pull Request 分支进行更改”。

在本地修改一个活动的 Pull Request

  1. 在你的代码库名称下,单击 拉取请求.

    Screenshot of the main page of a repository. In the horizontal navigation bar, a tab, labeled "Pull requests," is outlined in dark orange.

  2. 在 Pull Request 列表中,单击你要修改的 Pull Request。

  3. 若要选择你希望在何处打开 Pull Request,请选择 代码下拉菜单,然后单击其中一个选项卡。

    Screenshot of a pull request title. A button with an arrow indicating a dropdown menu, labeled "Code," is outlined in dark orange.

若要详细了解 GitHub CLI,请参阅“关于 GitHub CLI”。

要本地检出拉取请求,请使用 gh pr checkout 子命令。用拉取请求的编号、网址或头分支替换 pull-request

gh pr checkout PULL-REQUEST

修改本地非活动拉取请求

如果拉取请求的作者对请求没有反应或已删除其分支,仍可通过新的拉取请求合并该拉取请求中提出的更改。但是,如果你想对拉取请求进行更改,而作者没有回应,则需要执行一些其他步骤来更新拉取请求。

一旦打开拉取请求,GitHub 将远程存储所有更改。换句话说,即使在合并拉取请求之前,拉取请求中的提交也会在存储库中可用。你可以获取一个开放的拉取请求并将其重新创建为自己的请求。

任何人都可以使用先前打开的拉取请求继续处理它、对其进行测试,甚至可以打开一个带有其他更改的新拉取请求。但是,只有具有推送权限的协作者才能合并拉取请求。

  1. 在你的代码库名称下,单击 问题 拉取请求.

    Screenshot of the main page of a repository. In the horizontal navigation bar, two tabs, labeled "Issues" and "Pull requests," are each outlined in dark orange.

  2. 在“拉取请求”列表中,单击你想要合并的拉取请求。

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

    Screenshot of the title of a pull request. The pull request's ID number is outlined in dark orange.

  4. 打开 终端终端Git Bash

  5. 根据其 ID 号获取对拉取请求的引用,在此过程中创建一个新分支。

    git fetch origin pull/ID/head:BRANCH_NAME
    
  6. 切换到基于此拉取请求的新分支

    [main] $ git switch BRANCH_NAME
    > Switched to a new branch 'BRANCH_NAME'
    
  7. 此时,你可以对该分支执行任何操作。你可以运行一些本地测试,或将其他分支合并到该分支中。

  8. 准备就绪后,你可以推送新分支

    [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. 使用你的新分支创建一个新的拉取请求

错误:无法推送某些引用

远程 refs/pull/ 命名空间为只读。如果你尝试在那里推送任何提交,你将看到此错误

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

提示:当你删除或重命名远程引用时,你的本地 refs/pull/origin/ 命名空间不会受到 git-remote 调用影响。