# 关于拉取请求

拉取请求允许你提出、查看和合并代码更改。

拉取请求是将代码更改合并到项目中的建议。 拉取请求是 GitHub 的基本 **协作功能**，让你可以在合并更改之前讨论和审查更改。 这有助于团队协同工作、提前捕获问题并维护代码质量。

```
          <a href="https://github.com/pulls?ref_product=github&ref_type=engagement&ref_style=button" target="_blank" class="btn btn-primary mt-3 mr-3 no-underline">
          <span>查看拉取请求</span><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-link-external" aria-label="link external icon" role="img"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a>
```

## 处理拉取请求

拉取请求的 **“对话”** 选项卡显示更改的描述、事件时间线以及协作者的评论和审核。 通过此中心，可以跟踪提议的更改的讨论进展情况。

“ **提交** ”选项卡按时间顺序显示对拉取请求分支所做的所有提交。 这有助于了解开发历史记录，并了解随时间变化的变化。

“ **检查** ”选项卡显示推送提交时运行的任何自动测试、生成或其他持续集成工作流的状态。 这些检查有助于在合并之前确保更改符合质量标准。

“ **文件更改** ”选项卡显示建议的更改与现有代码之间的差异，使得在拉取请求合并时可以轻松查看更改的内容。

## 草稿拉取请求

创建拉取请求时，可以选择将其设为草稿拉取请求。 无法合并草稿拉取请求，并且不会自动请求代码所有者审阅它们。 如果要在不正式请求评审的情况下共享正在进行的工作，这非常有用。

```
          准备获取对拉取请求的反馈时，可将拉取请求草稿标记为可供审查。 将拉取请求标记为可供审查将要求任何代码所有者进行审查。 可以随时将拉取请求转换为草稿。 请参阅“[AUTOTITLE](/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request)”。
```

## 拉取请求引用和合并分支

打开拉取请求时， GitHub 会为其创建最多两个临时只读 Git 引用：

| 参考                                    | 说明                                                               |
| ------------------------------------- | ---------------------------------------------------------------- |
| `refs/pull/PULL_REQUEST_NUMBER/head`  | 指向拉取请求的头分支的最新提交。                                                 |
| `refs/pull/PULL_REQUEST_NUMBER/merge` | 合并分支——一个模拟的合并提交，表示如果立即合并拉取请求，存储库将呈现的状态。 仅当拉取请求没有合并冲突时，此 ref 才可用。 |

当头分支或基分支发生更改时，合并分支会自动更新。 在本地提取它：

```shell
git fetch origin refs/pull/PULL_REQUEST_NUMBER/merge
git checkout FETCH_HEAD
```

将 `PULL_REQUEST_NUMBER` 替换为您的拉取请求编号。

有关GitHub Actions使用合并分支的信息，请参阅[触发工作流的事件](/zh/actions/reference/workflows-and-actions/events-that-trigger-workflows#how-the-merge-branch-affects-your-workflow)。

## 比较页和拉取请求页上的提交之间的差异

比较页和拉取请求页使用不同的方法来计算已更改文件的差异：

* 比较页显示头部引用的提示与头部及基础引用当前的共同上层节点（即合并基础）之间的差异。
* 拉请求页面显示在创建拉取请求时头部引用头与头部和基础的共同上层节点之间的差异。 因此，用于比较的合并基可能有所不同。

## 其他阅读材料

* [创建拉取请求](/zh/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
* [关于分支](/zh/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-branches)
* [评论拉取请求](/zh/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request)