Skip to main content

本地检查拉取请求

有人从您仓库的复刻或分支向您发送拉取请求时,您可以在本地合并它以解决合并冲突, 或者在 GitHub 上合并之前测试并验证更改。

谁可以使用此功能?

Anyone with write access to a repository can pull a remote pull request down locally.

Platform navigation

Tool navigation

Note

拉取请求创建者可授权上游存储库维护员或对上游存储库具有推送权限的人员,允许他们提交到用户拥有的分支中其拉取请求的比较分支。 有关详细信息,请参阅“允许更改从复刻创建的拉取请求分支”。

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

  1. 在存储库名称下,单击 “拉取请求”。

    存储库的主页的屏幕截图。 在水平导航栏中,标记为“拉取请求”的选项卡以深橙色标出。

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

  3. 要选择打开拉取请求的位置,请选择 “代码”下拉菜单并单击其中一个选项卡。

    拉取请求标题的屏幕截图。 标有“代码”且带有箭头(表示下拉菜单)的按钮以深橙色标出。

Note

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

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

gh pr checkout PULL-REQUEST

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

如果拉取请求的作者对请求无响应或已删除其分支,则仍可通过新拉取请求合并该拉取请求中建议的更改。 但是,如果您要对拉取请求进行更改,而其作者又没有响应,则需要执行一些额外步骤来更新拉取请求。

拉取请求在打开后,GitHub 将远程存储所有更改。 换句话说,即使在合并拉取请求之前,拉取请求中的提交也可用于仓库。 您可以获取打开的拉取请求,并将其重建为自己的拉取请求。

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

  1. 在存储库名称下,单击 “问题”或 “拉取请求”。

    存储库的主页的屏幕截图。 在水平导航栏中,标记为“问题”和“拉取请求”的两个选项卡均以深橙色标出。

  2. 在“Pull Requests(拉取请求)”列表中,单击要合并的拉取请求。

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

    拉取请求标题的屏幕截图。 拉取请求的 ID 编号以深橙色标出。

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

错误:无法推送某些 ref

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

! [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

移除或重命名远程引用时,本地 refs/pull/origin/ 命名空间不会受到对 git-remote 的调用的影响。