Skip to main content

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.

Nota:

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.

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
    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
    git add .
    git commit -m "helpful-commit-message"
    
  3. Vuelva a base de las ramas anteriores para recoger el cambio.

    Shell
    gh stack rebase --upstack
    
  4. Inserte las ramas actualizadas y vuelva a donde estaba trabajando.

    Shell
    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
    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
    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 addy, 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.

Nota:

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.

Nota:

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 modifyinteractivo .

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
    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.
    • Mayús+^ / Mayús+ : 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 ctrl/cmd+s.

    Si se produce un conflicto durante la aplicación, resíquelo y ejecute gh stack modify --continueo 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
    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.

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
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