Nota:
Esta característica está en versión preliminar pública y está sujeta a cambios.
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 Solicitudes de incorporación de cambios apiladas.
Installation
gh extension install github/gh-stack
La extensión requiere GitHub CLI (gh) versión 2.0 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
| Comando | Purpose |
|---|---|
gh stack init | Inicialice una nueva pila en el repositorio actual. |
gh stack add | Agregue una nueva rama en la parte superior de la pila actual. |
gh stack view | Ver la pila actual. |
gh stack checkout | Extrae 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 modify | Reestructurar la pila actual de forma interactiva. |
gh stack unstack | Elimina una pila del seguimiento local y desmontala en GitHub. |
gh stack submit | Realiza 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 sync | Obtenga, haga rebase, envíe y sincronice el estado de la solicitud de extracción en un solo comando. |
gh stack rebase | Realiza un pull desde el servidor remoto y ejecuta un rebase en cascada en toda la pila. |
gh stack push | Inserte las ramas activas de la pila actual en el remoto. |
gh stack link | Vincula solicitudes de extracción a una pila en GitHub sin seguimiento local. |
gh stack merge | Fusiona una o varias pull requests apiladas de una vez. |
gh stack switch | Cambie interactivamente a otra rama de la pila. |
gh stack up | Suba hacia la parte superior de la pila, alejándose del tronco. |
gh stack down | Desplázate hacia la parte inferior de la pila, hacia el tronco. |
gh stack top | Salta al inicio de la pila. |
gh stack bottom | Salta al final de la pila. |
gh stack trunk | Salta a la rama troncal. |
gh stack alias | Cree un alias de comando corto para que pueda escribir menos. |
gh stack feedback | Comparta 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.
El comando habilita git rerere automáticamente, de modo que las resoluciones de conflictos se conserven de un rebase a otro.
| Flag | Description |
|---|---|
-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.
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.
| Flag | Description |
|---|---|
-A, --all | Preparar todos los cambios, incluidos los archivos no rastreados. Se requiere -m. |
-u, --update | Preparar 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.
| Flag | Description |
|---|---|
-s, --short | Salida compacta de una línea por rama |
--json | Generar 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>]
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.
| Flag | Description |
|---|---|
--continue | Continuar después de resolver conflictos |
--abort | Anule 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:
- Debes tener una pila activa descargada localmente.
- El árbol de trabajo debe estar limpio, sin cambios no confirmados.
- No hay ninguna operación de rebase en curso.
- No hay ninguna pull request de la pila en cola para su fusión.
- El historial de commits debe ser lineal, sin commits de fusión ni ramas divergentes.
Operations
| Funcionamiento | Key | Effect |
|---|---|---|
| Drop | ||
| x | Elimina 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 | ||
| d | Incorpora las confirmaciones a la rama inferior, hacia el tronco. La rama plegada se elimina de la pila. | |
| Plegar hacia arriba | ||
| u | Incorpora las confirmaciones a la rama superior, alejándolas del tronco. La rama plegada se elimina de la pila. | |
| Insertar a continuación | ||
| i | Inserte una nueva rama vacía debajo del cursor, hacia el tronco. | |
| Insertar arriba | ||
| Yo | Inserte 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. | |
| Rename | ||
| r | Cambia el nombre de la rama mediante un indicador en línea. | |
| Undo | ||
| z | Deshacer la última acción preconfigurada. |
Fase de aplicación
Al presionar Ctrl+S, los cambios preparados se aplican cambiando el nombre de las ramas, insertando ramas nuevas, plegando o eliminando ramas y ejecutando un rebase en cascada para crear un historial lineal de confirmaciones con el estado de la pila que quieras.
Si se produce un conflicto de rebase, puede:
- Resuelva los conflictos, almacene provisionalmente los archivos y, a continuación, ejecute
gh stack modify --continue. - Ejecute
gh stack modify --abortpara anular la operación y restaurar la pila en su estado anterior.
Después de modificar
Si ya has creado una pila de solicitudes de extracción en GitHub, ejecuta gh stack submit para enviar las ramas actualizadas y volver a crear la pila. El stack anterior se reemplaza automáticamente.
Ejemplos:
# Open the interactive modify interface
gh stack modify
# Continue after resolving a conflict
gh stack modify --continue
# Abort and restore to the previous state
gh stack modify --abort
gh stack unstack
Elimina una pila del seguimiento local y desmontala en GitHub. Este comando también está disponible como gh stack delete.
gh stack unstack [<stack-number>] [flags]
Sin argumentos, el comando se dirige a la pila activa, que es la pila que contiene la rama actualmente seleccionada. Desapila la pila de GitHub y elimina el seguimiento local.
Introduce un número de pila, el identificador que aparece en la interfaz de usuario de la pila en GitHub, para desmontar una pila específica. Esto funciona desde cualquier lugar del repositorio, independientemente de si la pila está descargada localmente o no, ya que la pila se desmonta directamente a través de la API de GitHub. Cuando la pila también está disponible localmente, se elimina también su seguimiento local.
Las pull requests fusionadas, en proceso de fusión o en cola para fusionarse no se pueden eliminar de una pila en GitHub y siguen formando parte de la pila. Cuando se eliminan todas las solicitudes de incorporación de cambios, la pila se disuelve y se elimina cualquier seguimiento local. Cuando algunas solicitudes de incorporación de cambios permanecen apiladas, la pila se mantiene y el seguimiento local, si existe, no se modifica. Use --local para omitir la operación remota y quitar solo el seguimiento local.
Este comando es útil cuando necesita reestructurar una pila quitando una rama, insertando una rama, reordenando ramas, cambiando el nombre de las ramas o realizando otros cambios grandes. Después de desmontar, use gh stack init para volver a crear la pila con la estructura que desee. Las ramas existentes se incorporan automáticamente.
| Flag | Description |
|---|---|
--local | Eliminar solo la pila localmente, manteniéndola en GitHub |
Ejemplos:
# Unstack the current stack on GitHub and remove local tracking
gh stack unstack
# Unstack a specific stack by its number
gh stack unstack 7
# Only remove local tracking
gh stack unstack --local
Operaciones remotas
gh stack submit
Realiza 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 submit [flags]
Crea una solicitud de incorporación de cambios para cada rama de la pila, enviando las ramas al repositorio remoto. Después de crear solicitudes de incorporación de cambios, submit crea automáticamente una pila en GitHub para vincular las solicitudes de incorporación de cambios. Si la pila ya existe en GitHub, por ejemplo de un envío anterior, las nuevas pull requests se añaden a la pila existente.
Si todas las solicitudes de incorporación de cambios de la pila ya se han fusionado, dicha pila se considera completa y no se puede ampliar. En ese caso, submit inicia automáticamente una nueva pila con base en el tronco para tus ramas sin fusionar y la crea en GitHub, dejando intacta la pila ya fusionada.
En un terminal interactivo, submit abre un editor de pantalla completa en una sola pantalla.
- Panel izquierdo. Todas las ramas sin una pull request se incluyen de forma predeterminada. Deseleccione los que no quiera enviar con Ctrl+X. Dado que cada solicitud de incorporación de cambios se basa en la rama que tiene debajo, al deseleccionar una rama también se deseleccionan las que están por encima de ella, y al volver a incluir una rama se vuelven a incluir las que están por debajo y de las que depende. Las ramas que ya tienen una pull request, ya esté abierta, en borrador, en cola o fusionada, se muestran como referencia, pero están bloqueadas. Edítalas en la web.
- Panel derecho. Para la rama seleccionada, redacta el título y la descripción, y elige si la solicitud de incorporación de cambios se abre lista para su revisión o como borrador. La descripción se rellena automáticamente a partir de la plantilla de solicitudes de incorporación de cambios de tu repositorio o de las confirmaciones, con una vista previa en Markdown. Para editar la descripción en un editor externo, presione Ctrl+E. La extensión utiliza el primer valor no vacío de las variables de entorno
GH_EDITOR,VISUALyEDITOR, en ese orden. Si no se ha configurado ninguno, se usavisi está disponible en tuPATH. Al seleccionar una rama bloqueada, se muestra una tarjeta de solo lectura con un enlace a su solicitud de extracción. Presione o para abrirlo en el explorador.
Presione Ctrl+S para enviar todas las solicitudes de incorporación de cambios incluidas a la vez. El editor admite la entrada de teclado y mouse. Pase --autoo ejecute el comando en un terminal no interactivo, como CI, para omitir el editor y usar títulos generados automáticamente.
Si las ramas ya tienen solicitudes de incorporación de cambios abiertas, pero no hay ninguna pila en GitHub, puede vincular las solicitudes de incorporación de cambios a una pila con Ctrl+B.
En el editor, las nuevas solicitudes de incorporación de cambios aparecen por defecto como listas para su revisión. Puede cambiar cualquier solicitud de extracción a borrador con el conmutador. Con --auto, los pull requests se crean en modo borrador, a menos que se pase --open.