# 创建堆叠拉取请求（PR）

使用 GitHub CLI 中的 gh stack 扩展，或直接在 GitHub 上，创建依赖拉取请求的堆栈。

使用 `gh stack` 扩展在 GitHub CLI 中或在 GitHub 网站上创建堆叠拉取请求。

> \[!NOTE]
> 堆积拉取请求要求所有分支都位于同一存储库中。 不支持跨分支堆栈。

## 使用  创建堆栈

1. 初始化堆栈。 这会基于主干分支创建并签出第一个分支。

   ```shell copy
   gh stack init BRANCH-NAME
   ```

2. 为第一层编写代码，然后暂存并提交更改。

   ```shell copy
   git add .
   git commit -m "helpful-commit-message"
   ```

3. 为下一个逻辑工作单元创建分支。 新分支基于当前分支创建。

   ```shell copy
   gh stack add BRANCH-NAME
   ```

4. 在新分支上编写代码并提交。 对每个附加层重复此操作。

5. 将所有分支推送到远程存储库，并在 GitHub 上创建堆叠拉取请求。

   ```shell copy
   gh stack submit
   ```

   每个拉取请求都是使用正确的基分支创建的，因此审阅者只能看到该层的差异，并且拉取请求会自动作为堆栈链接在一起。

## 从 GitHub 网站创建栈

可以通过将每个拉取请求的基分支设置为其下方的分支，无需使用 CLI 即可创建堆栈。

1. 像平常一样创建第一个拉取请求。 通常，你的基地通常会以 `main` 为目标。

2. 创建下一个拉取请求，并将其基分支设置为第一个拉取请求的分支。 选择“**创建堆叠**”选项，将两个拉取请求关联为一个堆叠。

   创建后，堆栈会显示相互关联的拉取请求（PR）。

   * 拉取请求顶部的堆栈图标 <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-stack" aria-label="The stack icon" role="img"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg> 显示一个数字，表示您当前查看的是哪一层。
   * 堆栈映射显示在合并框中。 它显示堆栈中的每个拉取请求（PR）及其状态，并允许你只需单击一次即可跳转到任意一层。

3. 对每个额外的拉取请求重复此操作，以它前一个拉取请求的分支为目标。

## 将现有拉取请求转换为堆叠

如果你已经有一些已打开的拉取请求，这些分支首尾衔接，其中每个拉取请求的基分支都是其下方拉取请求的头分支，GitHub 可识别该链并显示**建议横幅**，以将它们转换为堆栈。

1. 在任何符合条件的拉取请求中，选择横幅以打开预览堆栈的对话框，按从上到下的顺序列出每个拉取请求。

2. 查看预览并确认将这些拉取请求链接起来，形成一个堆栈。

确认后，堆叠图将显示在每个拉取请求的标头中。

## 从 GitHub 网站添加到现有堆栈中

若要向已存在的栈添加新的 PR，请执行以下操作：

1. 在堆栈中打开任何拉取请求，单击标题栏中的 **<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-stack" aria-label="The stack icon" role="img"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>**，然后单击“**<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-plus" aria-label="Add button" role="img"><path d="M7.75 2a.75.75 0 0 1 .75.75V7h4.25a.75.75 0 0 1 0 1.5H8.5v4.25a.75.75 0 0 1-1.5 0V8.5H2.75a.75.75 0 0 1 0-1.5H7V2.75A.75.75 0 0 1 7.75 2Z"></path></svg> 添加到堆栈**”。

2. 基础分支会自动设置为最上层拉取请求的 head 分支。 选择新拉取请求的头分支，然后选择“ **创建拉取请求**”。

3. 选择 **“<svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-plus" aria-label="Add button" role="img"><path d="M7.75 2a.75.75 0 0 1 .75.75V7h4.25a.75.75 0 0 1 0 1.5H8.5v4.25a.75.75 0 0 1-1.5 0V8.5H2.75a.75.75 0 0 1 0-1.5H7V2.75A.75.75 0 0 1 7.75 2Z"></path></svg>添加到堆栈**”以创建拉取请求（PR）。

新的拉取请求已添加到堆栈的顶部。

## 延伸阅读

* [堆叠式拉取请求 CLI 命令](/zh/enterprise-cloud@latest/pull-requests/reference/stacked-prs-cli-commands)