# 拉取请求快速入门

提出你的第一个更改，并将其从首次提交一路推进到拉取请求被合并。

拉取请求建议在独立于主代码库的分支上进行更改，以便其他人可以在合并更改之前查看这些更改。 本快速入门将指导你通过最简单的方法创建拉取请求。 你将创建分支、进行和提交更改、打开拉取请求、响应反馈和合并。

选择上方的其中一个选项卡，即可在 GitHub 网站上或通过 GitHub CLI 跟着操作。

## 为该仓库创建分支或派生副本

首先创建一个隔离的工作环境。

<div class="ghd-tool webui">

1. 在 GitHub上，导航到要为其建议更改的存储库的主页。
2. 或者，如果你没有写权限，就需要创建一个 fork。 单击右上角的 **Fork**，然后按照步骤操作。 然后，在存储库的分支中继续操作。
3. 单击文件列表顶部的分支选择器菜单。 它上面可能写着 **main**。 键入新的分支名称，然后单击 **“从 main 创建分支 *new-branch-name***”。

</div>

<div class="ghd-tool cli"> 

1. 若要使用 GitHub CLI，首先需要安装它。 请参阅“[GitHub CLI 快速入门](/zh/enterprise-server@3.21/github-cli/github-cli/quickstart)”。

2. 克隆存储库。 或者，将存储库分叉并同时在本地克隆。

* 如果对存储库具有写入访问权限，请克隆存储库：

  ```shell
  gh repo clone OWNER/REPO
  ```

* 如果你没有写入权限，你需要先创建一个 **派生**，然后一次性将其克隆下来。

  ```shell
  gh repo fork OWNER/REPO --clone
  ```

1. 切换到克隆的仓库目录。

   ```shell
   cd REPO
   ```

2. 创建并切换到新分支。

   ```shell
   git checkout -b YOUR-BRANCH-NAME
   ```

</div>

## 创作或编辑代码

请在该分支中进行修改。 对于你的第一个拉取请求，请确保改动聚焦且简洁。 较小的拉取请求审查起来更快，也更容易合并。

请尝试以下其中一项进行更改：

* 在本地 IDE 或文本编辑器中编辑文件。
* 只需浏览到该文件并点击<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-pencil" aria-label="Edit this file" role="img"><path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path></svg>，即可直接在GitHub上编辑文件。

## 频繁提交

将工作保存在小型有意义的提交中。 每次提交都会记录一个快照和一条描述此次更改的消息。

<div class="ghd-tool cli">

```shell
git add .
git commit -m "Describe your change"
git push --set-upstream origin YOUR-BRANCH-NAME
```

</div>

<div class="ghd-tool webui">

当你在 GitHub 上编辑文件并准备好提交时，输入提交说明，然后直接提交到你的分支。

1. 单击“ **提交更改...”**。
2. 在 **“提交”消息** 框中，输入所做更改的简短说明。
3. 选择要处理的分支。
4. 单击“提议更改”。

你的更改将被添加并提交到该分支。

</div>

## 打开拉取请求

当你的分支中包含了你想提出的更改时，向基础分支发起拉取请求。

<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="The pull request icon" 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>**，然后单击“**新建拉取请求**”。
2. 对于 **base** 分支，main 可能已被选中，并且通常就是你要合并到的基础分支。
3. 对于 **比较** 分支，请选择包含更改的分支。
4. 单击“创建拉取请求”\*\*\*\*。
5. 输入标题和说明，说明更改的内容以及原因。
6. 你可以创建可供审查的拉取请求，也可以创建草稿状态的拉取请求。

* 如果已可供审查，请单击“**创建拉取请求**”。
* 若要共享正在进行的工作，请使用下拉列表并选择“ **创建草稿拉取请求**”。

</div>

<div class="ghd-tool cli">

您可以创建可供审查的拉取请求，或处于草稿状态的拉取请求。

* 如果已准备好供审核：

  ```shell
  gh pr create
  ```

* 共享正在进行的工作

  ```shell
  gh pr create --draft
  ```

然后，按照提示设置基本分支、标题和说明。

</div>

如果对同一分支进行进一步提交，它们将自动添加到拉取请求中。

## 请求评审

若要通过 **“审阅者** ”框请求评审，需要对存储库具有写入访问权限，并且可以请求具有对存储库的读取访问权限的人员或团队的评审。 如果你请求审查，相关人员或团队将收到通知。 在某些情况下，你会看到系统建议的审阅者，你可以从中选择。

如果“**审阅者**”框不可用，您可以：

* 查看存储库的自述文件，获取有关拉取请求评审的指导，并按照其说明进行操作。
* 如果你知道谁可以帮你进行评审，请联系对方，并将你的拉取请求链接发给对方。

## 处理评审反馈

审阅者可以在合并拉取请求之前注释、建议更改或请求更改。

* 若要接受审阅者的建议，请单击 **“提交建议** ”（或批量单击“ **提交”建议**）。
* 若要进行更广泛的更改，请编辑代码并将新提交推送到同一分支。 拉取请求会自动更新，并重新运行所有检查项。
* 处理完后，将每个对话都标记为 **已解决**。

## 合并和部署

所需评审和状态检查均通过后，合并拉取请求，将你的更改合并到基础分支。 如果决定不合并更改，可以改为关闭拉取请求。

> \[!TIP]
> 不同的存储库可能有不同的合并要求。 查看任何相关指南并按照其说明进行操作。

<div class="ghd-tool webui">

1. 在拉取请求的底部，单击“ **合并拉取请求**”。
2. 单击“ **确认** ”以完成合并。
3. （可选）删除头分支以保持存储库整洁。

</div>

<div class="ghd-tool cli">

```shell
gh pr merge
```

按照提示选取合并方法并选择性地删除分支。

</div>

## 后续步骤

在你提交第一个拉取请求后，试着审核一下别人的工作。 请参阅“[查看拉取请求的快速入门](/zh/enterprise-server@3.21/pull-requests/get-started/reviewing-pull-requests-quickstart)”。

## 延伸阅读

* [Writing code for a project](/zh/enterprise-server@3.21/pull-requests/concepts/writing-code-for-a-project)
* [拉取请求](/zh/enterprise-server@3.21/pull-requests/reference/pull-requests)