Skip to main content
Skip to content

Comandos de la CLI para pull requests apiladas

Busque todos los comandos, marcas y código de salida de la gh stack extensión en GitHub CLI.

La extensión gh stack para GitHub CLI crea y gestiona pilas de pull requests a partir de tu repositorio local. Para obtener una introducción a las pilas, consulte Pull requests apiladas.

Installation

gh extension install github/gh-stack

La extensión requiere GitHub CLI (gh) versión 2.0 o posterior, y Git 2.36 o posterior.

Nota:

La gh stack extensión usa la GitHub CLI autenticación. Si aún no se ha autenticado, ejecute gh auth login.

Resumen de comandos

ComandoPurpose
gh stack initInicialice una nueva pila en el repositorio actual.
gh stack addAgregue una nueva rama en la parte superior de la pila actual.
gh stack viewVer la pila actual.
gh stack checkoutExtrae una pila por número de pila, número de solicitud de extracción, URL de solicitud de extracción o nombre de rama.
gh stack modifyReestructurar la pila actual de forma interactiva.
gh stack unstackElimina una pila del seguimiento local y desmontala en GitHub.
gh stack submitRealiza un push de todas las ramas y, a continuación, crea o actualiza las solicitudes de extracción y la pila en GitHub.
gh stack syncObtenga, haga rebase, envíe y sincronice el estado de la solicitud de extracción en un solo comando.
gh stack rebaseRealiza un pull desde el servidor remoto y ejecuta un rebase en cascada en toda la pila.
gh stack pushInserte las ramas activas de la pila actual en el remoto.
gh stack linkVincula solicitudes de extracción a una pila en GitHub sin seguimiento local.
gh stack mergeFusiona una o varias pull requests apiladas de una vez.
gh stack switchCambie interactivamente a otra rama de la pila.
gh stack upSuba hacia la parte superior de la pila, alejándose del tronco.
gh stack downDesplázate hacia la parte inferior de la pila, hacia el tronco.
gh stack topSalta al inicio de la pila.
gh stack bottomSalta al final de la pila.
gh stack trunkSalta a la rama troncal.
gh stack aliasCree un alias de comando corto para que pueda escribir menos.
gh stack feedbackComparta comentarios sobre la gh stack extensión.

Gestión de la pila

gh stack init

Inicialice una nueva pila en el repositorio actual.

gh stack init [flags] [branches...]

Inicializa una nueva pila localmente. En modo interactivo (sin argumentos), el comando solicita un nombre de rama y ofrece usar la rama actual como primera capa.

Al proporcionar nombres de rama explícitos, las ramas existentes se adoptan automáticamente y se crean las ramas que faltan. El tronco tiene como valor predeterminado la rama predeterminada del repositorio, a menos que la invalide con --base.

Se pueden adoptar ramas extraídas en otros árboles de trabajo. Si la rama final ya está extraída en otro lugar, init deja la extracción actual sin cambios e informa del worktree propietario en su lugar.

El comando habilita git rerere automáticamente, de modo que las resoluciones de conflictos se conserven de un rebase a otro.

FlagDescription
-b, --base <branch>Rama trunk de la pila (por defecto, la rama predeterminada del repositorio)

Ejemplos:

# Interactive — prompts for branch names
gh stack init

# Non-interactive — specify first branch upfront
gh stack init feature-auth

# Use a different trunk branch
gh stack init --base develop feature-auth

# Adopt or create multiple branches at once
gh stack init feature-auth feature-api feature-ui

gh stack add

Agregue una nueva rama en la parte superior de la pila actual.

gh stack add [flags] [branch]

En el caso de una pila existente, crea una nueva rama en head actual, la agrega a la parte superior de la pila y la extrae. Debe ejecutar este comando mientras se encuentra en la rama superior de una pila. Si no proporciona un nombre de rama, el comando solicita uno.

Si el nombre de rama que proporcione ya está extraído en otro árbol de trabajo, add adopta la rama existente sin cambiar ninguna de las copias de trabajo. Los atajos de confirmación y preparación -A, -u y -m son incompatibles con ese tipo de adopción, y el comando produce un error antes de almacenar provisionalmente nada o cambiar la pertenencia a la pila.

Al ejecutar el comando de forma interactiva desde una rama que no forma parte de una pila, add ofrece inicializar una nueva pila en su lugar. El nombre de rama que proporcione o el nombre generado automáticamente se convierte en la primera capa. Si no proporciona un nombre, se usan las indicaciones estándar init .

Opcionalmente, puedes preparar los cambios y crear una confirmación como parte del flujo de add. Cuando se proporciona -m sin un nombre de rama explícito, el nombre de la rama se genera automáticamente en formato de fecha y de slug, como 03-24-add_login.

FlagDescription
-A, --allPreparar todos los cambios, incluidos los archivos no rastreados. Se requiere -m.
-u, --updatePreparar cambios solo en los archivos rastreados. Se requiere -m.
-m, --message <string>Cree una confirmación con este mensaje antes de crear la rama.

Nota:

-A y -u son mutuamente excluyentes.

Ejemplos:

# Create a branch by name
gh stack add api-routes

# Prompt for a branch name interactively
gh stack add

# Stage all changes, commit, and auto-generate the branch name
gh stack add -Am "Add login endpoint"

# Stage only tracked files, commit, and auto-generate the branch name
gh stack add -um "Fix auth bug"

# Commit already-staged changes and auto-generate the branch name
gh stack add -m "Add user model"

# Stage all changes, commit, and use an explicit branch name
gh stack add -Am "Add tests" test-layer

# Stage only tracked files, commit, and use an explicit branch name
gh stack add -um "Update docs" docs-layer

gh stack view

Ver la pila actual.

gh stack view [flags]

Muestra todas las ramas de la pila, su orden, los enlaces a las solicitudes de incorporación de cambios y la confirmación más reciente con una marca de tiempo relativa. De forma predeterminada, el comando abre una vista de pantalla completa en un terminal interactivo e imprime la salida estática en un terminal no interactivo. Las opciones --short y --json se imprimen directamente en la salida estándar en ambos entornos.

FlagDescription
-s, --shortSalida compacta de una línea por rama
--jsonGenerar los datos de la pila en formato JSON

Ejemplos:

gh stack view
gh stack view --short
gh stack view --json

gh stack view --short usa hipervínculos OSC 8 para los números de las solicitudes de extracción cuando el terminal los admite. De lo contrario, se muestra la dirección URL completa para copiar y pegar. Establezca GH_STACK_HYPERLINKS=1 o GH_STACK_HYPERLINKS=0 para invalidar la detección de terminales.

gh stack checkout

Consulta una pila por su número de pila, el número de una solicitud de incorporación de cambios, la URL de una solicitud de incorporación de cambios o el nombre de una rama.

gh stack checkout [<stack-number> | <pr-number> | <pr-url> | <branch>]
FlagDescription
--print-pathImprima la ruta de acceso absoluta del árbol de trabajo de destino. Requiere un objetivo explícito y nunca solicita.

Para un destino que se extrajo en otro árbol de trabajo, --print-path imprime la ruta de acceso de ese árbol de trabajo sin cambiar ninguna de las dos extracciones. Para un objetivo que no está checked out en ningún sitio, el comando hace checkout de la rama en el árbol de trabajo actual antes de imprimir su ruta de acceso. Sin la marca, intentar extraer un destino ocupado en otro lugar es un error que incluye un diagnóstico de ruta de acceso, en lugar de un cambio correcto. Consulte Navegación para obtener más información sobre el contrato de respuesta.

Un número sin más se interpreta en primer lugar como un número de pila o de solicitud de incorporación de cambios. Se trata de identificadores de ámbito de repositorio que se muestran en la GitHub interfaz de usuario. Si nada coincide con el número, se prueba como nombre de rama.

Al hacer referencia a una pila remota, el comando captura la pila en GitHub, extrae las ramas y configura la pila localmente. Si la pila ya existe localmente y coincide, el comando cambia a la rama. Si las pilas locales y remotas tienen composiciones diferentes, se te pedirá que resuelvas el conflicto.

Cuando indicas un nombre de rama, el comando comprueba primero las pilas de las que se lleva un seguimiento localmente. Si la rama no está siendo rastreada localmente, el comando busca la rama en stacks remotos y descarga el stack correspondiente. Si hay más de una pila que coincide, utiliza un número de pila o de solicitud de incorporación de cambios para elegir una de forma explícita.

Cuando ejecutas el comando sin argumentos en un terminal interactivo, primero comprueba si la rama actual pertenece a una pila del remoto de la que no se hace seguimiento local y te ofrece cambiarte a ella. Si no hay una coincidencia única, o rechazas la opción, se abre un selector con búsqueda que muestra todas las pilas que tienes disponibles, tanto las pilas de las que se hace seguimiento local como las pilas que solo existen en GitHub. Cada fila muestra el número de pila, su rama inferior y superior, la rama base, una barra de estado que resume cuántas de sus solicitudes de incorporación de cambios están fusionadas, abiertas, cerradas o aún no enviadas, y si la pila está disponible localmente o solo en el servidor remoto. Filtre con las pestañas Todos, Locales y Remotos , o escriba / para buscar. Se omiten las pilas totalmente combinadas. Al seleccionar una stack solo disponible en remoto, se clona en local antes de cambiar a esta.

Ejemplos:

# Check out a stack by its stack number
gh stack checkout 7

# Check out a stack by pull request number
gh stack checkout 42

# Check out a stack by pull request URL
gh stack checkout https://github.com/owner/repo/pull/42

# Check out a stack by branch name
gh stack checkout feature-auth

# Interactive — pick from all available stacks (local and remote)
gh stack checkout

gh stack modify

Reestructurar la pila actual de forma interactiva.

gh stack modify [flags]

Abre una interfaz de usuario interactiva de terminal para reestructurar una pila. Todos los cambios se almacenan provisionalmente en la interfaz y se aplican juntos al presionar Ctrl+S. No se pueden modificar las ramas de las solicitudes de incorporación de cambios combinadas.

FlagDescription
--continueContinuar después de resolver conflictos
--abortAnule la sesión de modificación y restaure la pila en su estado antes de ejecutar el comando.

Condiciones previas

El comando comprueba estas condiciones antes de abrir la interfaz:

  1. Debes tener una pila activa descargada localmente.
  2. El árbol de trabajo debe estar limpio, sin cambios no confirmados.
  3. No hay ninguna operación de rebase en curso.
  4. No hay ninguna pull request de la pila en cola para su fusión.
  5. El historial de commits debe ser lineal, sin commits de fusión ni ramas divergentes.
  6. Todos los árboles de trabajo necesarios para las acciones en el área de preparación y las ramas que sobreviven a la cascada deben estar limpios y libres de otras operaciones de Git.

Las ramas de pila se pueden distribuir entre los árboles de trabajo. Los cambios de nombre se realizan en el propio árbol de trabajo de la rama. Los cherry-picks de fold-down se ejecutan en el árbol de trabajo de la rama receptora. Las rebasificaciones en cascada ejecutan cada rama en su propio directorio de trabajo. Una rama que no está extraída en ningún lugar usa el árbol de trabajo desde el que se ejecutó modify, y las ramas insertas se crean como referencias sin nuevos árboles de trabajo. Se conservan las ramas quitadas y contraídas, y sus árboles de trabajo. La rama principal solo se lee, por lo que no es necesario que los árboles de trabajo de origen no relacionados o sin modificar estén limpios.

Operations

FuncionamientoKeyEffect
Drop
xElimina la rama y sus confirmaciones de la pila. Se conservan la rama local y la solicitud de incorporación de cambios asociadas.
Pliegue hacia abajo
dIncorpora las confirmaciones a la rama inferior, hacia el tronco. La rama plegada se elimina de la pila.
Plegar hacia arriba
uIncorpora las confirmaciones a la rama superior, alejándolas del tronco. La rama plegada se elimina de la pila.
Insertar a continuación
iInserte una nueva rama vacía debajo del cursor, hacia el tronco.
Insertar arriba
YoInserte una nueva rama vacía encima del cursor, lejos del tronco.
Bajar
Mayús+↓Reordene la rama hacia abajo, hacia el tronco.
Subir
Mayús+↑Reordene la rama hacia arriba, lejos del tronco.