# 合并拉取请求

将拉取请求合并到上游分支，选择合并方法，并满足审核或状态检查等存储库要求。

## 关于拉取请求合并

在建议的更改准备就绪且满足任何存储库要求时合并拉取请求。 无法合并草稿拉取请求。

存储库规则或分支保护可能要求在合并前进行评审、状态检查，或使用最新分支。 请参阅“[关于受保护分支](/zh/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches)”。

作为分支保护规则的替代方法，可以创建规则集。 规则集在分支保护规则（例如状态）和更好的可发现性（无需管理员访问权限）上具有一些优势。 还可以同时应用多个规则集。 有关详细信息，请参阅“[关于规则集](/zh/repositories/configuring-branches-and-merges-in-your-repository/managing-rulesets/about-rulesets)”。

您可以配置拉取请求在满足所有合并要求时自动合并。 有关详细信息，请参阅“[自动合并拉取请求](/zh/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/automatically-merging-a-pull-request)”。

如果基分支需要合并队列，可用的合并选项与此处所述的选项不同。 请参阅“[将拉取请求与合并队列合并](/zh/pull-requests/how-tos/merge-and-close-pull-requests/merging-a-pull-request-with-a-merge-queue)”。

如果拉取请求存在合并冲突，或者要首先测试更改， [请在本地查看拉取请求](/zh/pull-requests/how-tos/review-pull-requests/checking-out-pull-requests-locally)。

合并后，存储库可能会自动删除头分支。 请参阅“[管理分支的自动删除](/zh/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/managing-the-automatic-deletion-of-branches)”。

> \[!NOTE]
> 如果您在拉取请求合并后删除头部分支，GitHub 会检查将已删除分支指定为基础分支的同一仓库中的任何开放拉取请求。 GitHub 将自动更新任何此类拉取请求，将其基础分支更改为合并的拉取请求的基础分支。

拉取请求使用[`--no-ff`选项](https://git-scm.com/docs/git-merge#_fast_forward_merge)，但使用快速向前合并的已压缩或重新定基拉取请求除外。

可以将拉取请求链接到问题，以显示修复正在进行，并在合并拉取请求时自动关闭问题。 有关详细信息，请参阅“[将拉取请求链接到议题](/zh/issues/tracking-your-work-with-issues/using-issues/linking-a-pull-request-to-an-issue)”。

如果不想合并更改，可以 [关闭拉取请求](/zh/pull-requests/how-tos/merge-and-close-pull-requests/closing-a-pull-request)。

## 合并拉取请求

<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. 向下滚动到拉取请求底部。 根据为存储库启用的合并选项，选择合并方法：

   * [通过单击 **“合并拉取请求”**，将所有提交合并到基础分支](/zh/pull-requests/reference/pull-request-merges)。 如果未显示此选项，请单击合并下拉菜单，然后选择“ **创建合并提交**”。

     ![拉取请求的合并选项的屏幕截图。 用于展开下拉列表的箭头以深橙色轮廓显示。](/assets/images/help/pull_requests/merge-pull-request-options.png)

   * 通过点击合并下拉菜单，选择 **Squash and merge**，然后点击 **Squash and merge**，将提交[压缩为一个提交](/zh/pull-requests/reference/pull-request-merges#squash-and-merge-your-commits)。

   * [通过单击“合并”下拉菜单、选择 **“变基并合并”**，然后单击 **“变基并合并”**，将各个提交分别变基到基础分支上](/zh/pull-requests/reference/pull-request-merges#rebase-and-merge-your-commits)。

   > \[!NOTE]
   > 变基并合并始终会更新提交者信息，并创建新的提交 SHA。 请参阅 [“关于拉取请求合并](/zh/pull-requests/reference/pull-request-merges#rebase-and-merge-your-commits)”。

4. 如有提示，输入提交消息，或接受默认消息。

   有关 squash 合并的默认提交消息的信息，请参阅 [合并拉取请求](/zh/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges#merge-message-for-a-squash-merge)。

5. 如果有多个 GitHub电子邮件地址与帐户关联，请单击电子邮件地址下拉菜单，并选择用作 Git 作者电子邮件地址的电子邮件地址。 只有经过验证的电子邮件地址才会出现在此下拉菜单中。 如果启用了电子邮件地址隐私，则使用无回复电子邮件地址作为默认提交作者的电子邮件地址。 有关无回复电子邮件地址可以采用的确切格式的详细信息，请参阅“[设置提交电子邮件地址](/zh/account-and-profile/how-tos/email-preferences/setting-your-commit-email-address)”。

![GitHub 拉取请求的屏幕截图，其中显示了一个下拉菜单，包含用于选择提交作者电子邮件地址的选项。
octocat@github.com 处于选中状态。](/assets/images/help/repository/choose-commit-email-address.png)

> \[!NOTE]
> 电子邮件选择器不适用于变基合并，因为变基合并不会创建合并提交。 对于压缩合并，仅当你是拉取请求作者，且你的帐户关联了多个电子邮件地址时，才会显示电子邮件选择器。

1. 单击“确认合并”****、“确认压缩并合并”**** 或“确认变基并合并”\*\*\*\*。
2. （可选）[删除分支](/zh/repositories/configuring-branches-and-merges-in-your-repository/managing-branches-in-your-repository/deleting-and-restoring-branches-in-a-pull-request)。 这使得仓库中的分支列表保持整洁。

</div>

<div class="ghd-tool cli">

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

要合并拉取请求，请使用 `gh pr merge` 子命令。 将 `pull-request` 替换为拉取请求的数字、URL 或主分支。

```shell
gh pr merge PULL-REQUEST
```

按照交互式提示完成合并。 请参阅“[合并拉取请求](/zh/pull-requests/reference/pull-request-merges)”。

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

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

</div>

## 延伸阅读

* [还原拉取请求](/zh/pull-requests/how-tos/merge-and-close-pull-requests/reverting-a-pull-request)
* [在 GitHub Desktop 中同步分支](/zh/desktop/working-with-your-remote-repository-on-github-or-github-enterprise/syncing-your-branch-in-github-desktop)使用GitHub Desktop
* [合并拉取请求](/zh/pull-requests/reference/pull-request-merges)
* [合并、关闭拉取请求](/zh/pull-requests/how-tos/merge-and-close-pull-requests)