# Administración de solicitudes de incorporación de cambios apiladas

Reestructure las solicitudes de incorporación de cambios apiladas, vuelva a base de sus ramas y realice cambios en capas inferiores mediante GitHub CLI.

> \[!NOTE] Esta característica está en versión preliminar pública y está sujeta a cambios.

A medida que itera en una pila, a menudo debe realizar cambios en una capa inferior, volver a basar para mantener un historial lineal o reestructurar sus ramas. La `gh stack` extensión de GitHub CLI controla estas tareas con operaciones en cascada que actualizan todas las ramas afectadas. Consulte [Comandos de la CLI de solicitudes de incorporación de cambios apiladas](/es/pull-requests/reference/stacked-prs-cli-commands).

## Realizar cambios en una capa inferior

Cuando esté trabajando en la capa superior y necesite cambiar algo más bajo en la pila, realice el cambio en la rama en la que pertenece y vuelva a base, en lugar de trabajar alrededor de él en la capa actual.

1. Vaya a la rama que necesita el cambio.

   ```shell copy
   gh stack down
   ```

   También puede consultar una rama específica con `gh stack checkout BRANCH-NAME`.

2. Realice el cambio y confírmelo.

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

3. Vuelva a base de las ramas anteriores para recoger el cambio.

   ```shell copy
   gh stack rebase --upstack
   ```

4. Inserte las ramas actualizadas y vuelva a donde estaba trabajando.

   ```shell copy
   gh stack push
   gh stack top
   ```

## Rebasificación de la pila

Una pila debe tener un historial lineal entre sus ramas para poder combinarla. La ejecución `gh stack rebase` realiza una rebase en cascada donde cada rama se vuelve a basar en la parte superior de la rama debajo, empezando por `main`, por lo que cada rama recoge los cambios más recientes de todas las capas inferiores.

1. Vuelva a base de la pila. De forma predeterminada, esto vuelve a base de cada rama de la parte inferior a la parte superior.

   ```shell copy
   gh stack rebase
   ```

   Para limitar la base, use `--downstack` para rebase desde la capa más baja hasta la rama actual o `--upstack` para volver a base desde la rama actual hasta la parte superior.

2. Inserte las ramas actualizadas. Esto usa `--force-with-lease` para actualizar de forma segura las ramas rebasedas.

   ```shell copy
   gh stack push
   ```

Si una base de datos encuentra un conflicto, `gh stack rebase` detiene y enumera los archivos en conflicto.

* Resuelva los marcadores de los archivos afectados, preconfigurarlos con `git add`y, a continuación, ejecute `gh stack rebase --continue`.
* Para empezar, ejecute `gh stack rebase --abort` para restaurar todas las ramas a su estado anterior a la base.

> \[!NOTE]
> También puede desencadenar una rebase del lado servidor desde la solicitud de incorporación de cambios, pero esas confirmaciones no están firmadas. Si el repositorio requiere confirmaciones firmadas, vuelva a base de GitHub CLI para que las confirmaciones sigan la configuración de firma de confirmación de Git local.

### Rebasing desde el GitHub sitio web

Cuando una pila no es lineal, aparece un botón **Rebase stack** en el cuadro de combinación. Al seleccionarlo, se desencadena una base en cascada del lado servidor que:

1. Vuelve a basar toda la pila encima del tronco más reciente, como `main`.
2. Vuelve a basar cada rama no combinada encima de su rama base, trabajando desde la parte inferior de la pila hacia arriba.
3. Force-pushes cada rama rebaseda para actualizar el control remoto.

Una vez completada la base, todas las solicitudes de incorporación de cambios reflejan las ramas actualizadas y las comprobaciones de CI se vuelven a desencadenar.

> \[!NOTE]
> Las confirmaciones creadas por una rebase del lado servidor **no** están firmadas. Si el repositorio requiere confirmaciones firmadas, vuelva a base de GitHub CLI con `gh stack rebase` para que las confirmaciones sigan la configuración de firma de confirmación de Git local y, a continuación, inserte con `gh stack push`.

## Reestructuración de una pila

Es posible que desee cambiar la composición de una pila. Por ejemplo, si necesita quitar una rama, combinar ramas, insertar una rama, reordenar o cambiar el nombre, use el comando `gh stack modify`interactivo .

Antes de ejecutar `gh stack modify`, asegúrese de lo siguiente:

* Tiene una pila activa desprotegida.
* El árbol de trabajo está limpio.
* No hay ninguna base en curso.
* No se pone en cola ninguna solicitud de incorporación de cambios para combinar.
* El historial de confirmaciones es lineal.

1. Abra la interfaz de usuario de modificar terminal.

   ```shell copy
   gh stack modify
   ```

2. Seleccione una rama y almacene provisionalmente una operación. Los cambios estructurales y de reordenación (drop, fold, insert, rename) no se pueden mezclar en la misma sesión.

   * `x` : quitar una rama y sus confirmaciones
   * `d` — plegar la rama en la debajo de ella
   * `u` : dobla la rama en la que se encuentra encima
   * `i`
     /
     `I` : inserte una nueva rama debajo o encima del cursor.
   * `r` : cambie el nombre de una rama.
   * <kbd>Mayús</kbd>+<kbd>^</kbd> / <kbd>Mayús</kbd>+<kbd>→</kbd> : reordenar una rama
   * `z` : deshacer la última acción preconfigurada

3. Aplique los cambios almacenados provisionalmente guardando. No se modifica nada hasta que se guarda.

   Use <kbd>ctrl/cmd</kbd>+<kbd>s</kbd>.

   Si se produce un conflicto durante la aplicación, resíquelo y ejecute `gh stack modify --continue`o ejecute `gh stack modify --abort` para restaurar el estado de modificación previa.

4. Inserte las ramas actualizadas y vuelva a crear la pila en GitHub.

   ```shell copy
   gh stack submit
   ```

## Desstacking desde el GitHub sitio web

Para disolver una pila del sitio web, por ejemplo, para reordenarla o reorganizarla, use la opción **Destack** en la pila.

Desstacking quita las solicitudes de incorporación de cambios **abiertas, borradores y cerradas** de la pila. Cada uno mantiene su rama base actual, pero ya no está vinculada a las demás, y los requisitos de asignación de pila y combinación de pila desaparecen de ellos.

**Las solicitudes de incorporación de cambios combinadas y en cola permanecen en la pila.** Una vez que una solicitud de incorporación de cambios se ha combinado o se pone en cola para la combinación, como parte de una pila, no se puede desstackar. Una pila se disuelva completamente solo cuando ninguna de sus solicitudes de incorporación de cambios se ha combinado o se pone en cola para la combinación; de lo contrario, se conserva con esas solicitudes de incorporación de cambios todavía en ella.

Para reordenar o reestructurar una pila sin interrumpirla, use el `gh stack modify` comando en su lugar. Consulte [Reestructuración de una pila](#restructuring-a-stack).

## Sincronización del entorno local después de las combinaciones

Cuando se combina una solicitud de incorporación de cambios en la parte inferior de la pila, actualice el estado local con un único comando de sincronización. Para eliminar automáticamente las ramas locales para las solicitudes de incorporación de cambios combinadas al mismo tiempo, agregue la `--prune` opción .

```shell copy
gh stack sync --prune
```

Esto captura los cambios más recientes, reenvía rápidamente el tronco, rebase las ramas restantes en él, inserta las ramas actualizadas y sincroniza el estado de la solicitud de incorporación de cambios de GitHub.

### Extracción de solicitudes de incorporación de cambios agregadas a la pila en GitHub

Si otra persona agrega solicitudes de incorporación de cambios a la pila en GitHub, `gh stack sync` captura las nuevas ramas y las anexa a la pila local para que refleje el control remoto. Una actualización remota limpia, como esta, se extrae automáticamente, por lo que `gh stack sync` es seguro ejecutarse en la automatización.

### Resolución de una pila diverged

Las pilas locales y remotas difieren cuando ninguna de ellas es una extensión limpia del otro, por ejemplo, cuando se agrega una rama localmente mientras se agregan solicitudes de incorporación de cambios diferentes a la misma pila en GitHub. Cuando esto sucede, `gh stack sync` no puede combinar los dos automáticamente. En un terminal interactivo, ofrece tres opciones:

* **Use la pila remota como origen de la verdad.** Reemplaza la composición de la pila local por el control remoto y extrae las ramas que faltan. Si estaba en una rama, la pila remota ya no contiene, se le moverá a la rama de supervivencia más cercana. Esto requiere un árbol de trabajo limpio sin cambios no confirmados.
* **Elimine la pila en GitHub.** Elimina el objeto de pila en GitHub y detiene la sincronización. Las solicitudes de incorporación de cambios y las ramas locales no se modifican. Vuelva a crear la pila con `gh stack submit`, que también crea solicitudes de incorporación de cambios para las ramas que aún no haya enviado. Ejecute `gh stack modify` primero si desea cambiar su estructura.
* **Cancelar.** Anula la sincronización sin insertar ramas ni actualizar las solicitudes de incorporación de cambios.

En un terminal no interactivo, como CI, una divergencia anula la sincronización sin insertar ramas ni actualizar solicitudes de incorporación de cambios. Para resolverlo, desstacking y volver a crear la pila.

## Pasos siguientes

* [Revisión de solicitudes de incorporación de cambios apiladas](/es/pull-requests/how-tos/review-pull-requests/reviewing-stacked-pull-requests)
* [Combinación de solicitudes de incorporación de cambios apiladas](/es/pull-requests/how-tos/merge-and-close-pull-requests/merging-stacked-pull-requests)