Remarque
Cette fonctionnalité est disponible en préversion publique et peut être modifiée.
L’extension gh stack pour GitHub CLI crée et gère des séries de demandes de tirage depuis votre dépôt local. Pour une présentation des piles, consultez Demandes de tirage empilées.
Installation
gh extension install github/gh-stack
L’extension nécessite GitHub CLI (gh) la version 2.0 ou ultérieure.
Remarque
L’extension gh stack utilise votre GitHub CLI authentification. Si vous n’avez pas encore authentifié, exécutez gh auth login.
Résumé de la commande
| Command | Purpose |
|---|---|
gh stack init | Initialisez une nouvelle pile dans le référentiel actuel. |
gh stack add | Ajoutez une nouvelle branche au-dessus de la pile actuelle. |
gh stack view | Affichez la pile actuelle. |
gh stack checkout | Extrayez une pile à l’aide de son numéro, du numéro de la demande de tirage, de son URL ou du nom de la branche. |
gh stack modify | Restructurez de manière interactive la pile actuelle. |
gh stack unstack | Supprimez une pile du suivi local et décompressez-la sur GitHub. |
gh stack submit | Poussez toutes les branches, puis créez ou mettez à jour les pull requests et la stack sur GitHub. |
gh stack sync | Récupérez, rebase, push et synchronisez l’état de la pull request dans une seule commande. |
gh stack rebase | Récupérez depuis le dépôt distant et effectuez un rebasage en cascade sur toute la pile. |
gh stack push | Envoyez les branches actives de la pile actuelle vers le dépôt distant. |
gh stack link | Lier des pull requests dans une stack sur GitHub sans suivi en local. |
gh stack merge | Fusionnez une ou plusieurs pull requests empilées en une seule fois. |
gh stack switch | Basculez interactivement vers une autre branche dans la pile. |
gh stack up | Monter vers le haut de la pile, loin du tronc. |
gh stack down | Descendez vers le bas de la pile, vers la jonction. |
gh stack top | Accédez au haut de la pile. |
gh stack bottom | Passez au bas de la pile. |
gh stack trunk | Passez à la branche principale. |
gh stack alias | Créez un alias de commande court pour que vous puissiez taper moins. |
gh stack feedback | Partagez vos commentaires sur l’extension gh stack . |
Gestion des piles
gh stack init
Initialisez une nouvelle pile dans le référentiel actuel.
gh stack init [flags] [branches...]
Initialisez une nouvelle stack localement. En mode interactif (aucun argument), la commande invite à entrer un nom de branche et propose d’utiliser la branche actuelle comme première couche.
Lorsque vous fournissez des noms de branche explicites, les branches existantes sont adoptées automatiquement et toutes les branches manquantes sont créées. Par défaut, la branche utilisée est la branche par défaut du dépôt, sauf si vous la remplacez avec --base.
La commande active automatiquement git rerere, afin de mémoriser les résolutions de conflits lors des rebasages.
| Flag | Description |
|---|---|
-b, --base <branch> | Branche principale de la pile (par défaut : la branche par défaut du dépôt) |
Exemples :
# 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
Ajoutez une nouvelle branche au-dessus de la pile actuelle.
gh stack add [flags] [branch]
Pour une pile existante, crée une branche au HEAD actuel, l’ajoute en haut de la pile et la recherche. Vous devez exécuter cette commande dans la branche la plus haute d’une pile. Si vous ne fournissez pas de nom de branche, la commande vous invite à en créer un.
Lorsque vous exécutez la commande de manière interactive à partir d’une branche qui ne fait pas partie d’une pile, add vous propose d’initialiser une nouvelle pile à la place. Le nom de branche que vous fournissez, ou le nom généré automatiquement, devient la première couche. Si vous n’indiquez pas de nom, les messages d’invite standard init sont utilisés.
Vous pouvez, si vous le souhaitez, préparer des modifications et créer un commit dans le cadre du flux add. Lorsque vous fournissez -m sans nom de branche explicite, le nom de la branche est généré automatiquement au format date et slug, tel que 03-24-add_login.
| Flag | Description |
|---|---|
-A, --all | Placez toutes les modifications, y compris les fichiers non suivis. Exige -m. |
-u, --update | Indexez uniquement les modifications apportées aux fichiers suivis. Exige -m. |
-m, --message <string> | Créer une validation avec ce message avant de créer la branche |
Remarque
-A et -u s’excluent mutuellement.
Exemples :
# 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
Affichez la pile actuelle.
gh stack view [flags]
Affiche toutes les branches de la pile, leur ordre, les liens vers les pull requests et le commit le plus récent avec un horodatage relatif. Par défaut, la commande ouvre une vue plein écran dans un terminal interactif et imprime la sortie statique dans un terminal non interactif. Les options --short et --json s’affichent directement sur la sortie standard dans l’un ou l’autre environnement.
| Flag | Description |
|---|---|
-s, --short | Compacter une sortie d’une ligne par branche |
--json | Exporter les données de la pile au format JSON |
Exemples :
gh stack view
gh stack view --short
gh stack view --json
gh stack view --short utilise des hyperliens OSC 8 pour les numéros de pull request si le terminal les prend en charge. Sinon, l’URL complète est affichée pour copier-coller. Définissez GH_STACK_HYPERLINKS=0 ou GH_STACK_HYPERLINKS=1 pour remplacer la détection du terminal.
gh stack checkout
Extrayez une pile à l’aide de son numéro, d’un numéro de la demande de tirage, d’une URL ou d’un nom de branche.
gh stack checkout [<stack-number> | <pr-number> | <pr-url> | <branch>]
Un nombre nu est interprété en premier comme un numéro de pile ou de demande de tirage. Il s’agit d’identifiants propres au référentiel, affichés dans l’interface utilisateur GitHub. Si rien ne correspond au nombre, il est essayé en tant que nom de branche.
Lorsque vous référencez une pile distante, la commande récupère la pile sur GitHub, extrait les branches et configure la pile localement. Si la stack existe déjà localement et correspond, la commande bascule sur la branche. Si les piles locales et distantes ont des compositions différentes, vous êtes invité à résoudre le conflit.
Lorsque vous indiquez un nom de branche, la commande vérifie d’abord les stacks suivies localement. Si la branche n’est pas suivie en local, la commande recherche la branche dans les piles distantes et récupère la pile correspondante. Si plusieurs piles correspondent, utilisez le numéro d’une pile ou d’une pull request pour en sélectionner une explicitement.
Lorsque vous exécutez la commande sans arguments dans un terminal interactif, elle vérifie d’abord si la branche actuelle appartient à une pile sur la distance qui n’est pas suivie localement et propose de l’extraire. S’il n’y a pas de correspondance unique ou si vous refusez, il ouvre un sélecteur pouvant faire l’objet d’une recherche qui répertorie toutes les piles disponibles, à la fois les piles suivies localement et les piles qui existent uniquement sur GitHub. Chaque ligne affiche le numéro du stack, sa branche du bas et sa branche du haut, la branche de base, une barre d’état récapitulant combien de ses pull requests sont fusionnées, ouvertes, fermées ou pas encore poussées, ainsi que si le stack est disponible localement ou uniquement sur le dépôt distant. Filtrez avec les onglets All, Local et Remote , ou tapez / pour effectuer une recherche. Les piles entièrement fusionnées sont omises. La sélection d’une pile distante uniquement la clone localement avant de passer à celle-ci.
Exemples :
# 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
Restructurez de manière interactive la pile actuelle.
gh stack modify [flags]
Ouvre une interface utilisateur de terminal interactive pour la restructuration d’une pile. Toutes les modifications sont mises en attente dans l’interface et appliquées ensemble lorsque vous appuyez sur Ctrl+S. Vous ne pouvez pas modifier les branches issues de pull requests fusionnées.
| Flag | Description |
|---|---|
--continue | Continuer après la résolution des conflits |
--abort | Abandonner la session de modification et restaurer la pile à son état avant d’exécuter la commande |
Conditions préalables
La commande vérifie ces conditions avant d’ouvrir l’interface :
- Vous devez disposer d’une pile active extraite en local.
- Votre arborescence de travail doit être propre, sans aucune modification non validée.
- Aucun rebasage n’est en cours.
- Aucune pull request de la pile n’est en attente de fusion.
- L’historique des validations doit être linéaire, sans validations de fusion et aucune branche divergente.
Operations
| Operation | Clé | Résultat |
|---|---|---|
| Drop | ||
| x | Supprimez la branche et ses commits de la pile. La branche locale et la pull request associée sont conservées. | |
| Plier vers le bas | ||
| d | Absorber les commits dans la branche ci-dessous, en direction de la jonction. La branche pliée est supprimée de la pile. | |
| Contenir | ||
| u | Absorber les commits dans la branche au-dessus, à l’opposé de la jonction. La branche pliée est supprimée de la pile. | |
| Insérer ci-dessous | ||
| i | Insérer une nouvelle branche vide en dessous du curseur, vers le tronc. | |
| Insérer ci-dessus | ||
| Je | Insérez une nouvelle branche vide au-dessus du curseur, à l’écart du tronc. | |
| Descendre | ||
| Maj+↓ | Réorganisez la branche vers le bas vers le tronc. | |
| Monter | ||
| Maj+↑ | Réorganisez la branche vers le haut, à l’écart du tronc. | |
| Rename | ||
| r | Renommez la branche à l’aide d’une invite intégrée. | |
| Undo | ||
| Z | Annulez la dernière action mise en attente. |
Phase d’application
Lorsque vous appuyez sur Ctrl+S, les modifications intermédiaires sont appliquées en renommant des branches, en insérant de nouvelles branches, en pliant ou en supprimant des branches, et en exécutant un rebase en cascade pour créer un historique de validation linéaire avec l’état de pile souhaité.
Si un conflit de rebasage se produit, vous pouvez :
- Résolvez les conflits, étapez les fichiers, puis exécutez
gh stack modify --continue. - Exécutez
gh stack modify --abortpour abandonner l’opération et restaurer la pile à son état précédent.
Après la modification
Si vous avez déjà créé une pile de pull requests sur GitHub, exécutez gh stack submit pour pousser les branches mises à jour et recréer la pile. L’ancienne pile est remplacée automatiquement.
Exemples :
# 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
Supprimez une pile du suivi local et décompressez-la sur GitHub. Cette commande est également disponible en tant que gh stack delete.
gh stack unstack [<stack-number>] [flags]
Sans argument, la commande cible la pile active, qui est la pile qui contient la branche actuellement extraite. Elle décompresse la pile GitHub et supprime le suivi local.
Indiquez le numéro de la pile, c’est-à-dire l’identifiant affiché dans l’interface utilisateur de la pile sur GitHub, pour dépiler une pile spécifique. Cela fonctionne depuis n’importe quel emplacement du référentiel, que la pile soit ou non récupérée localement, car la pile est désempilée directement via l’API GitHub. Lorsque la pile est également disponible localement, son suivi local est également supprimé.
Les pull requests qui sont fusionnées, en cours de fusion ou en attente de fusion ne peuvent pas être supprimées d’une pile sur GitHub et font toujours partie de la pile. Lorsque toutes les pull requests sont supprimées, la pile est dissoute et tout suivi local est supprimé. Lorsque certaines pull requests restent dans la pile, la pile est conservée et le suivi local, le cas échéant, reste inchangé. Permet --local d’ignorer l’opération distante et de supprimer uniquement le suivi local.
Cette commande est utile lorsque vous devez restructurer une pile en supprimant une branche, en insérant une branche, en réorganisant des branches, en renommant des branches ou en apportant d’autres modifications importantes. Après avoir désempilé, utilisez gh stack init pour recréer la pile avec la structure souhaitée. Les branches existantes sont adoptées automatiquement.
| Flag | Description |
|---|---|
--local | Supprimez uniquement la pile localement, en la conservant sur GitHub |
Exemples :
# 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
Opérations à distance
gh stack submit
Poussez toutes les branches, puis créez ou mettez à jour les pull requests et la stack sur GitHub.
gh stack submit [flags]
Crée une pull request pour chaque branche de la stack, en poussant les branches vers le dépôt distant. Après avoir créé des pull requests, submit crée automatiquement une pile sur GitHub afin de relier les pull requests entre elles. Si l’empilement existe déjà sur GitHub, par exemple s’il a été créé lors d’une soumission précédente, les nouvelles pull requests sont ajoutées à l’empilement existant.
Si chaque pull request de la stack a déjà été fusionnée, cette stack est complète et ne peut pas être étendue. Dans ce cas, submit démarre automatiquement une nouvelle pile enracinée au niveau de la jonction pour vos branches non fusionnées et la crée sur GitHub, laissant la pile fusionnée intacte.
Dans un terminal interactif, submit ouvre un éditeur plein écran sur un seul écran.
- Panneau gauche. Chaque branche sans pull request est incluse par défaut. Désélectionnez les éléments que vous ne souhaitez pas envoyer avec Ctrl+X. Étant donné que chaque pull request s’appuie sur la branche située en dessous d’elle, désélectionner une branche désélectionne également celles qui sont empilées au-dessus d’elle, et réinclure une branche réinclut celles situées en dessous dont elle dépend. Les branches qui ont déjà une pull request, qu’elle soit ouverte, à l’état de brouillon, en attente ou fusionnée, sont affichées à titre informatif, mais sont verrouillées. Modifiez-les sur le web.
- Panneau droit. Pour la branche ciblée, rédigez le titre et la description, puis choisissez si la pull request est ouverte prête pour révision ou comme brouillon. La description est préremplie à partir du modèle de pull request ou des commits de votre dépôt, avec un aperçu en Markdown. Pour modifier la description dans un éditeur externe, appuyez sur Ctrl+E. L’extension utilise la première valeur non vide des variables d’environnement
GH_EDITOR,EDITORetVISUAL, dans cet ordre. Si aucun n’est défini, il utilisevis’il est disponible sur votrePATH. Lorsqu’on sélectionne une branche verrouillée, une carte en lecture seule s’affiche avec un lien vers sa pull request. Appuyez sur o pour l’ouvrir dans le navigateur.
Appuyez sur Ctrl+S pour soumettre toutes les pull requests incluses en une seule fois. L’éditeur prend en charge l’entrée du clavier et de la souris.
--autoPassez ou exécutez la commande dans un terminal non interactif tel que CI, pour ignorer l’éditeur et utiliser des titres générés automatiquement.
Si les branches ont déjà des pull requests ouvertes, mais qu’aucune stack n’existe sur GitHub, vous pouvez lier les pull requests en une stack avec Ctrl+B.
Dans l’éditeur, les nouvelles pull requests sont par défaut prêtes pour révision. Vous pouvez convertir n’importe quelle demande de tirage en brouillon à l’aide du bouton bascule. Avec --auto, les nouvelles pull requests sont créées à l’état de brouillon, à moins de transmettre --open.
| Flag | Description |
|---|---|
--auto | Ignorer l’éditeur et utiliser les titres de pull request générés automatiquement |
--open | Créez de nouvelles demandes de tirage comme prêtes à être examinées au lieu des brouillons et marquez les demandes de tirage existantes comme prêtes à être examinées |
--remote <name> | Dépôt distant vers lequel effectuer le push (par défaut, le dépôt distant détecté automatiquement) |
Exemples :
gh stack submit
gh stack submit --auto
gh stack submit --open
gh stack sync
Récupérez, rebase, push et synchronisez l’état de la pull request dans une seule commande.
gh stack sync [flags]
Synchronise l’ensemble de la pile.
-
**Récupérez.** Récupère les dernières modifications de `origin`. -
**Synchronisez la pile distante.** Met la pile en miroir localement sur GitHub. Lorsque des pull requests ont été ajoutées à la pile sur GitHub, de sorte que le dépôt distant soit en avance sur votre pile locale, leurs branches sont récupérées et ajoutées automatiquement à votre pile locale. Lorsque les piles locale et distante ont réellement divergé, par exemple parce que vous avez ajouté une branche localement alors que différentes pull requests ont été ajoutées à la pile sur GitHub, vous êtes invité à résoudre la divergence. Consultez [les piles divergentes](#diverged-stacks). Dans un terminal non interactif, une divergence abandonne la synchronisation et rien n’est envoyé ou mis à jour. -
**Jonction rapide vers l’avant.** Avance rapidement la branche de jonction pour qu’elle corresponde à la distance. Cette étape est ignorée si les branches ont divergé. -
**Rebasage en cascade.** Rebase toutes les branches de la pile sur la version mise à jour de leur parent, mais uniquement si la branche principale a été déplacée. Si un conflit est détecté, toutes les branches sont restaurées à leur état d’origine et vous êtes invité à s’exécuter `gh stack rebase` pour résoudre les conflits de manière interactive. - Poussez. Envoie toutes les branches en utilisant
--force-with-leasesi un rebasage a eu lieu. - Synchroniser les pull requests. Synchronise l’état des pull requests depuis GitHub et indique le statut de chaque pull request.
- Synchronisez la pile. Lie les pull requests ouvertes de la pile dans une pile sur GitHub, en créant l’objet de pile distant s’il n’existe pas encore, ou en le mettant à jour s’il est partiellement créé. Cela se produit uniquement lorsqu’il existe deux pull requests ou plus. La synchronisation n’ouvre jamais de pull requests. Utilisez-le
gh stack submitpour cela. - Prune. Dans les terminaux interactifs, vous demande de supprimer les branches locales des pull requests fusionnées. Utilisez
--prunepour élaguer automatiquement.
Une mise à jour propre du dépôt distant, dans laquelle les demandes de tirage sont ajoutées au sommet de votre pile locale, est récupérée automatiquement sans demander de confirmation, si bien que sync peut être exécuté en toute sécurité dans des processus d’automatisation. Synchronisez uniquement les prompts lorsque les piles ont vraiment divergé.
Piles divergentes
Quand aucune pile n’est un préfixe propre de l’autre, par exemple si vous avez ajouté une branche localement tandis que des pull requests distinctes ont été ajoutées à la même pile sur GitHub, la synchronisation ne peut pas fusionner automatiquement les deux. Dans un terminal interactif, il offre trois choix.
- Utilisez la pile distante comme source de vérité. Remplace la composition de votre pile locale par celle du dépôt distant, en récupérant toutes les branches manquantes. Si vous étiez sur une branche que la pile distante ne contient plus, vous êtes déplacé vers la branche survivante la plus proche. Cela nécessite un état de travail propre sans modification non validée.
- Supprimez la pile sur GitHub. Supprime l’objet de pile sur GitHub et arrête la synchronisation. Vos pull requests et vos branches locales ne sont pas affectées, et seule la pile sur GitHub est supprimée. Recréez la pile avec
gh stack submit, en exécutant d’abordgh stack modifysi vous souhaitez en modifier la structure. C’est ainsi que vous pouvez aligner GitHub sur votre pile locale, carsubmit, contrairement àsync, crée également des demandes de fusion pour toutes les branches que vous n’avez pas encore soumises. - Annuler. Annule la synchronisation sans pousser de branches ni mettre à jour les pull requests.
Dans un terminal non interactif, une divergence interrompt la synchronisation et le processus se termine avec succès, sans pousser de branches ni mettre à jour les pull requests. Résolvez-le en déstacking et recréez la pile.
| Flag | Description |
|---|---|
--remote <name> | Dépôt distant depuis lequel récupérer et vers lequel pousser (par défaut, utilise le dépôt distant détecté automatiquement) |
--prune | Supprimer les branches locales des pull requests fusionnées |
Exemples :
gh stack sync
# Sync and automatically prune merged branches
gh stack sync --prune
gh stack rebase
Récupérez depuis le dépôt distant et effectuez un rebasage en cascade sur toute la pile.
gh stack rebase [flags] [branch]
Récupère les dernières modifications à partir de origin, puis garantit que chaque branche de la pile a la pointe de la couche précédente dans son historique de validation. Les branches font l’objet d’un rebasage dans l’ordre, à partir de la branche principale et en remontant.
Si la demande de tirage d’une branche a été fusionnée, le rebasage passe automatiquement en mode --onto afin de rejouer correctement les commits sur la cible de fusion.
Si un conflit de rebase survient, l’opération se met en pause et affiche les fichiers en conflit avec leurs numéros de ligne. Résolvez les conflits, mettez-les en scène avec git add, puis continuez avec --continue. Pour annuler la rebase entière, utilisez cette option --abort pour restaurer toutes les branches à leur état avant la rebase.
| Flag | Description |
|---|---|
--downstack | Ne rebaser que les branches de la jonction vers la branche actuelle |
--upstack | Rebaser uniquement les branches issues de la branche actuelle jusqu’en haut |
--no-trunk | Ignorez la jonction principale. Rebasez uniquement les branches empilées les unes sur les autres, sans opération d’extraction et sans rebasage sur la branche principale. |
--continue | Poursuivre le rebasage après avoir résolu les conflits |
--abort | Annuler le rebasage et restaurer toutes les branches dans l’état où elles se trouvaient avant le rebasage |
--remote <name> | Dépôt distant depuis lequel récupérer (par défaut, le dépôt distant détecté automatiquement est utilisé) |
--committer-date-is-author-date | Définissez la date du commiteur sur celle de l’auteur lors du rebasage. Alias : --preserve-dates. |
| Argument | Description |
|---|---|
[branch] | Branche cible (par défaut, la branche actuelle) |
Exemples :
# Rebase the entire stack
gh stack rebase
# Only rebase branches below the current one
gh stack rebase --downstack
# Only rebase branches above the current one
gh stack rebase --upstack
# Rebase stack branches without pulling from or rebasing with trunk
gh stack rebase --no-trunk
# After resolving a conflict
gh stack rebase --continue
# Abort rebase and restore everything
gh stack rebase --abort
# Rebase and preserve committer date as author date
gh stack rebase --committer-date-is-author-date
gh stack push
Envoyez les branches actives de la pile actuelle vers le dépôt distant.
gh stack push [flags]
Pousse chaque branche active, à l’exception des branches fusionnées et dans la file d’attente, en un seul git push, avec une vérification --force-with-lease explicite pour chaque branche. La mise à jour n’est pas atomique. Les branches dont les baux passent peuvent être mises à jour même si une autre branche est rejetée. Corrigez la branche rejetée et réexécutez la commande. Les branches qui ont déjà été mises à jour restent inchangées. Cette commande ne crée pas et ne met pas à jour les pull requests. Utilisez-le gh stack submit pour cela.
| Flag | Description |
|---|---|
--remote <name> | Dépôt distant vers lequel effectuer le push (par défaut, le dépôt distant détecté automatiquement) |
Exemples :
gh stack push
gh stack push --remote upstream
gh stack link
Lier des pull requests dans une stack sur GitHub sans suivi en local.
gh stack link [flags] <stack-number | branch-or-pr> <branch-or-pr> [...]
Crée ou met à jour une pile sur GitHub à partir de noms de branche, de numéros de pull request et d’URL. Cette commande ne crée ni ne modifie aucun état de suivi local. Il est conçu pour les personnes qui gèrent leurs branches localement avec d’autres outils, tels que Jujutsu, Sapling ou git-town, et qui souhaitent ouvrir une série de pull requests. Consultez « Utiliser d’autres outils avec des demandes de tirage empilées ».
Vous fournissez les arguments selon l’ordre de la pile, de bas en haut. Les branches indiquées sont automatiquement poussées vers le dépôt distant avant que les demandes de tirage ne soient créées ou recherchées. Pour les branches qui ont déjà des pull requests ouvertes, ces pull requests sont utilisées. Pour les branches sans pull request, de nouvelles pull requests sont créées automatiquement avec un chaînage correct des branches de base. Les pull requests existantes dont la branche de base ne correspond pas à la chaîne attendue sont corrigées automatiquement.
Si les pull requests ne sont pas encore dans une pile, une nouvelle pile est créée. Si certaines des demandes de tirage sont déjà dans une pile, la pile existante est mise à jour pour inclure les nouvelles demandes de tirage. Les pull requests existantes ne sont jamais supprimées d’une stack, car la mise à jour est uniquement additive.
Pour étendre une pile existante sans avoir à lister de nouveau ses pull requests, passez un numéro de pile, le numéro affiché dans l’interface utilisateur de la pile sur GitHub, comme premier argument. Les arguments restants sont ajoutés au sommet de cette pile. Les arguments déjà présents dans la pile sont ignorés et les arguments qui appartiennent à une autre pile sont rejetés. Comme les numéros de stack et de pull request ne se chevauchent jamais, un premier argument numérique n’est traité comme un stack que s’il correspond à un stack existant. Sinon, il est traité comme une pull request ou une branche.
| Flag | Description |
|---|---|
--base <branch> | Branche de base pour le bas de la pile (valeur par défaut de la branche par défaut du référentiel). Cet indicateur est ignoré lorsque vous ajoutez à une pile existante. |
--open | Marquer les demandes de tirage nouvelles et existantes comme prêtes à être examinées |
--remote <name> | Dépôt distant vers lequel effectuer le push (par défaut, le dépôt distant détecté automatiquement) |
Exemples :
# Link branches into a stack (pushes, creates pull requests, creates stack)
gh stack link feature-auth feature-api feature-ui
# Link existing pull requests by number
gh stack link 10 20 30
# Link existing pull requests by URL
gh stack link https://github.com/owner/repo/pull/10 https://github.com/owner/repo/pull/20
# Add branches to an existing stack of pull requests
gh stack link 42 43 feature-auth feature-ui
# Append to the top of an existing stack by its stack number, with no need
# to list the pull requests already in stack 7 again
gh stack link 7 48 feature-ui
# Use a different base branch and mark pull requests as ready for review
gh stack link --base develop --open feat-a feat-b feat-c
gh stack merge
Fusionnez une ou plusieurs pull requests empilées en une seule fois.
gh stack merge [<stack-number> | <pr-number>]
Fusionne toutes les demandes de tirage présentes dans la pile, jusqu’à la demande de tirage que vous choisissez incluse, dans la branche de base. La fusion est une opération unique, tout ou rien. Si une pull request ne peut pas être fusionnée, aucune ne le sera.
Sans argument, la commande utilise la pile locale active. Fournissez un numéro de stack pour fusionner une stack que vous n’avez pas récupérée localement, ce qui constitue une opération entièrement à distance, ou fournissez un numéro de pull request pour fusionner directement jusqu’à cette pull request.
Dans un terminal interactif, la commande vous invite à choisir les pull requests à fusionner, à sélectionner la méthode de fusion et à confirmer. Dans un terminal non interactif, ou lorsque vous utilisez --yes, toute la pile, ou tout ce qui précède la pull request que vous spécifiez, est fusionné sans demander de confirmation, en utilisant la méthode de fusion utilisée la dernière fois, sauf si vous en spécifiez une.
Seul l’état de base de la pull request est vérifié avant de fusionner. Chaque pull request doit être ouverte et ne doit pas être un brouillon. GitHub évalue les règles de protection des branches et de référentiel lorsque la fusion s’exécute, et toute défaillance est signalée à vous.
Remarque
Vous ne pouvez pas contourner les exigences de fusion lorsque vous fusionnez des demandes de tirage en pile.
Si la branche de base utilise une file d’attente de fusion, la stack est ajoutée à la file d’attente au lieu d’être fusionnée directement. La file choisit la méthode de fusion, donc le prompt ignore l’étape de sélection de la méthode de fusion, et les indicateurs --merge-method, --squash, --rebase et --merge sont ignorés avec un avertissement. Les pull requests que vous sélectionnez sont ajoutées ensemble à la file d’attente, mais elles sont fusionnées à mesure que la file d’attente les traite ; elles peuvent donc être intégrées dans des groupes distincts au lieu d’être toutes fusionnées en même temps.
| Flag | Description |
|---|---|
--merge-method <method> | Méthode de fusion à utiliser : merge, squashou rebase |
--merge, --squash, --rebase | Raccourcis pour la méthode de fusion correspondante |
-y, --yes | Fusionner sans demander de confirmation |
Exemples :
# Merge the current stack, choosing pull requests interactively
gh stack merge
# Merge a stack you do not have checked out, by stack number
gh stack merge 7
# Merge everything up to and including pull request 42
gh stack merge 42
# Merge the whole current stack without prompting, squashing commits
gh stack merge --yes --squash
Navigation
Les commandes de navigation vous permettent de passer d’une branche à l’autre dans la pile actuelle sans avoir à retenir le nom des branches. Le bas de la pile est la branche la plus proche du tronc, et le haut est la branche la plus éloignée.
up s’éloigne du tronc, et down se rapproche de celui-ci.
Toutes les commandes de navigation sont limitées aux limites de la pile. Monter depuis le haut ou descendre depuis le bas n’a aucun effet et affiche un message.
gh stack switch
Basculez interactivement vers une autre branche dans la pile.
gh stack switch
Affiche un sélecteur interactif répertoriant toutes les branches de la pile actuelle, classées de haut, les plus éloignées de la jonction, vers le bas, les plus proches de la jonction, avec leur numéro de position. Sélectionnez une branche pour l’extraire.
Cette commande nécessite un terminal interactif.
Exemples :
gh stack switch
# → Select a branch in the stack to switch to
# 5. frontend
# 4. api-endpoints
# 3. auth-layer
# 2. db-schema
# 1. config-setup
gh stack up
Monter vers le haut de la pile, loin du tronc.
gh stack up [n]
Déplace les branches vers le haut n , par défaut sur 1. Si vous êtes sur la branche de jonction, up passe à la première branche de pile.
Exemples :
# Move up one layer
gh stack up
# Move up three layers
gh stack up 3
gh stack down
Descendez vers le bas de la pile, vers la jonction.
gh stack down [n]
Déplace de n branches vers le bas, la valeur par défaut étant 1.
Exemples :
# Move down one layer
gh stack down
# Move down two layers
gh stack down 2
gh stack top
Accédez au haut de la pile.
gh stack top
Extrait la branche la plus éloignée du tronc.
gh stack bottom
Passez au bas de la pile.
gh stack bottom
Extrait la branche la plus proche du tronc.
gh stack trunk
Passez à la branche principale.
gh stack trunk
Bascule sur la branche de jonction de la pile actuelle, par exemple main. Vous devez vous trouver sur une branche faisant partie d’une pile.
Services publics
gh stack alias
Créez un alias de commande court pour que vous puissiez taper moins.
gh stack alias [flags] [name]
Installe un petit script wrapper dans ~/.local/bin/ ce qui transfère tous les arguments vers gh stack. Le nom d’alias par défaut est gs, mais vous pouvez choisir n’importe quel nom en le transmettant en tant qu’argument. Après l’installation, vous pouvez exécuter gs push au lieu de gh stack push.
Sur Windows, la création automatique d’alias n’est pas prise en charge. La commande imprime des instructions manuelles pour la création d’un fichier batch ou d’une fonction PowerShell.
| Flag | Description |
|---|---|
--remove | Supprimer un alias que vous avez créé précédemment |
Exemples :
# Create the default alias (gs), so that "gs push" and "gs view" both work
gh stack alias
# Create a custom alias
gh stack alias gst
# Remove an alias
gh stack alias --remove
gh stack alias --remove gst
gh stack feedback
Partagez vos commentaires sur l’extension gh stack .
gh stack feedback [title]
Ouvre une discussion dans le référentiel gh-stack pour vous permettre d’envoyer des commentaires. Vous pouvez éventuellement fournir un titre pour le billet de discussion.
Exemples :
gh stack feedback
gh stack feedback "Support for reordering branches"
Variables d’environnement
| Variable | Valeurs | Description |
|---|---|---|
GH_STACK_THEME | ||
auto (par défaut), light, dark | Contrôle la palette de couleurs des écrans interactifs pour submit, modify et view, ainsi que toute sortie de commande en couleur. Les couleurs s’adaptent automatiquement à l’arrière-plan de votre terminal. Définissez cette variable pour forcer la palette claire ou sombre lorsqu’un terminal ne signale pas sa couleur de fond, ce qui peut se produire dans certaines configurations SSH ou tmux. | |
GH_STACK_HYPERLINKS | ||
0, 1 | Désactive ou active les liens hypertexte OSC 8 lorsque la détection de terminal est incorrecte. Les terminaux non pris en charge affichent l’URL complète par défaut. |
# Force the light palette for one command
GH_STACK_THEME=light gh stack view
Codes de sortie
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Erreur générique |
| 2 | Introuvable dans une pile ou dans une pile introuvable |
| 3 | Conflit de base |
| 4 | |
| GitHub Échec de l’API | |
| 5 | Arguments ou indicateurs non valides |
| 6 | Ambiguïté requise, car la branche appartient à plusieurs piles |
| 7 | Rebasage déjà en cours |
| 8 | La pile est verrouillée par un autre processus |
| 9 | Les demandes de tirage empilées ne sont pas activées pour ce référentiel |
| 10 | La session de modification a été interrompue, et une récupération est requise |