跳至主要内容

合并拉取请求

在工作完成后,将拉取请求合并到上游分支。任何对存储库具有推送访问权限的人员都可以完成合并。

关于拉取请求合并

在拉取请求中,您建议将您在头部分支上所做的更改合并到基准分支中。默认情况下,任何拉取请求都可以在任何时间合并,除非头部分支与基准分支存在冲突。但是,您可能无法在特定时间将拉取请求合并到特定分支中。例如,只有在必需的状态检查通过后,您才能将拉取请求合并到默认分支中。存储库管理员可以使用分支保护规则为分支添加此类约束。有关更多信息,请参阅“关于受保护的分支”。

作为分支保护规则的替代方案,您可以创建规则集。与分支保护规则相比,规则集具有一些优势,例如状态,并且在无需管理员访问的情况下具有更好的可发现性。您还可以同时应用多个规则集。有关更多信息,请参阅“关于规则集”。

您可以将拉取请求配置为在满足所有合并要求时自动合并。有关更多信息,请参阅“自动合并拉取请求”。

如果拉取请求存在合并冲突,或者如果您想在合并之前测试更改,则可以在本地检出拉取请求并使用命令行将其合并。

您无法合并草稿拉取请求。有关草稿拉取请求的更多信息,请参阅“关于拉取请求”。

您可以配置存储库,以便在您合并拉取请求时自动删除拉取请求的头部分支。有关详细信息,请参阅“管理分支的自动删除”。

注意

如果您在合并拉取请求后删除了头部分支,GitHub 会检查同一存储库中是否存在任何指定已删除分支作为其基分支的打开的拉取请求。GitHub 会自动更新任何此类拉取请求,将其基分支更改为已合并的拉取请求的基分支。有关详细信息,请参阅“关于分支”。

拉取请求使用--no-ff 选项合并,除了已压缩或重新设置基础的拉取请求提交,它们使用快进选项合并。

您可以将拉取请求链接到问题,以表明修复正在进行中,并在有人合并拉取请求时自动关闭问题。有关详细信息,请参阅“将拉取请求链接到问题”。

如果您决定不希望主题分支中的更改合并到上游分支,则可以在不合并的情况下关闭拉取请求

合并拉取请求

  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. 在“拉取请求”列表中,单击您要合并的拉取请求。

  3. 向下滚动到拉取请求的底部。根据为您的存储库启用的合并选项,您可以

    注意

    重新设置基础并合并将始终更新提交者信息并创建新的提交 SHA。有关详细信息,请参阅“关于拉取请求合并”。

  4. 如果出现提示,请键入提交消息或接受默认消息。

    有关压缩合并的默认提交消息的信息,请参阅“关于拉取请求合并”。

  5. 如果您在 GitHub 上的帐户中关联了多个电子邮件地址,请单击电子邮件地址下拉菜单并选择用作 Git 作者电子邮件地址的电子邮件地址。此下拉菜单中仅显示已验证的电子邮件地址。如果您启用了电子邮件地址隐私,则“无回复”将是默认的提交作者电子邮件地址。有关“无回复”电子邮件地址可能采取的确切形式的更多信息,请参阅“设置您的提交电子邮件地址”。

    Screenshot of a GitHub pull request showing a dropdown menu with options to choose the commit author email address. octocat@github.com is selected.

    注意

    对于重新设置基础合并(不创建合并提交),电子邮件选择器不可用。对于压缩合并,只有当您是拉取请求作者并且您的帐户中关联了多个电子邮件地址时,才会显示电子邮件选择器。

  6. 单击“确认合并”、“确认压缩并合并”或“确认重新设置基础并合并”。

  7. 可选地,删除分支。这可以使存储库中的分支列表保持整洁。

要了解有关 GitHub CLI 的更多信息,请参阅“关于 GitHub CLI”。

要合并拉取请求,请使用 gh pr merge 子命令。将 pull-request 替换为拉取请求的编号、URL 或头部分支。

gh pr merge PULL-REQUEST

按照交互式提示完成合并。有关您可以选择的合并方法的更多信息,请参阅“关于拉取请求合并”。

或者,您可以使用标志跳过交互式提示。例如,此命令会将提交压缩成一个提交,提交消息为“my squash commit”,将压缩的提交合并到基分支,然后删除本地和远程分支。

gh pr merge 523 --squash --body "my squash commit" --delete-branch

进一步阅读