Remarque
Cette fonctionnalité est disponible en préversion publique et peut être modifiée.
Lorsque vous effectuez une itération sur une pile, vous devez souvent apporter des modifications dans une couche inférieure, rebaser pour conserver un historique linéaire ou restructurer ses branches. L’extension gh stack de GitHub CLI gestion de ces tâches avec des opérations en cascade qui mettent à jour chaque branche affectée. Consultez « Commandes CLI des demandes de tirage empilées ».
Apporter des modifications à une couche inférieure
Lorsque vous travaillez sur la couche supérieure et que vous devez modifier quelque chose de plus bas dans la pile, apportez la modification dans la branche dans laquelle elle appartient et rebasez, plutôt que de travailler autour de celle-ci au niveau de la couche active.
-
Accédez à la branche qui a besoin de la modification.
Shell gh stack down
gh stack downVous pouvez également consulter une branche spécifique avec
gh stack checkout BRANCH-NAME. -
Apportez la modification et validez-la.
Shell git add . git commit -m "helpful-commit-message"
git add . git commit -m "helpful-commit-message" -
Rebasez les branches ci-dessus pour récupérer la modification.
Shell gh stack rebase --upstack
gh stack rebase --upstack -
Envoyez (push) les branches mises à jour et revenez à l’endroit où vous travaillez.
Shell gh stack push gh stack top
gh stack push gh stack top
Rebasing de votre pile
Une pile doit avoir un historique linéaire entre ses branches avant de pouvoir fusionner. L’exécution gh stack rebase effectue une rebase en cascade où chaque branche est rebase en haut de la branche située en dessous, en commençant par main, de sorte que chaque branche récupère les dernières modifications de toutes les couches inférieures.
-
Rebasez la pile. Par défaut, cela rebase chaque branche du bas au haut.
Shell gh stack rebase
gh stack rebasePour limiter la rebase, utilisez cette option
--downstackpour rebaser à partir de la couche la plus basse jusqu’à current Branch, ou--upstackpour rebaser de la branche actuelle vers le haut. -
Envoyez (push) les branches mises à jour. Cela permet
--force-with-leasede mettre à jour les branches rebase en toute sécurité.Shell gh stack push
gh stack push
Si une nouvelle base rencontre un conflit, gh stack rebase arrête et répertorie les fichiers en conflit.
- Résolvez les marqueurs dans les fichiers affectés, mettez-les en scène avec
git add, puis exécutezgh stack rebase --continue. - Pour recommencer, exécutez
gh stack rebase --abortpour restaurer toutes les branches à leur état de pré-rebase.
Remarque
Vous pouvez également déclencher une rebase côté serveur à partir de la demande de tirage, mais ces validations ne sont pas signées. Si votre référentiel nécessite des validations signées, rebasez-les GitHub CLI pour que les validations suivent votre configuration de signature de validation Git locale.
Rebasing à partir du GitHub site web
Lorsqu’une pile n’est pas linéaire, un bouton De base de pile s’affiche dans la zone de fusion. La sélection de celle-ci déclenche une rebase en cascade côté serveur qui :
- Rebase la pile entière au-dessus de la dernière jonction, par
mainexemple . - Rebase chaque branche non fusionnée au-dessus de sa branche de base, travaillant du bas de la pile vers le haut.
- Force l’envoi (push) de chaque branche rebase pour mettre à jour la branche distante.
Une fois la nouvelle base terminée, chaque demande de tirage reflète les branches mises à jour et les vérifications CI sont réexécurées.
Remarque
Les validations créées par une rebase côté serveur ne sont pas signées. Si votre référentiel nécessite des validations signées, rebasez-les pour GitHub CLIgh stack rebase que les validations suivent votre configuration de signature de validation Git locale, puis envoyez (push) avec gh stack push.
Restructuration d’une pile
Vous pouvez modifier la composition d’une pile. Par exemple, si vous devez supprimer une branche, combiner des branches, insérer une branche, réorganiser ou renommer, utilisez la commande gh stack modifyinteractive.
Avant d’exécuter gh stack modify, vérifiez les éléments suivants :
- Vous disposez d’une pile active extraite.
- Votre arbre de travail est propre.
- Aucune nouvelle base n’est en cours.
- Aucune demande de tirage n’est mise en file d’attente pour fusionner.
- L’historique des validations est linéaire.
-
Ouvrez l’interface utilisateur de modification du terminal.
Shell gh stack modify
gh stack modify -
Sélectionnez une branche et effectuez une étape d’opération. La réorganisation et les modifications structurelles (drop, fold, insert, rename) ne peuvent pas être mélangées dans la même session.
x— supprimer une branche et ses validationsd— plier la branche dans celle-ci-dessousu— plier la branche dans celle ci-dessusi/I— insérer une nouvelle branche en dessous ou au-dessus du curseurr— renommer une branche- Période de travail+↑ / Période de travail+↑ — réorganiser une branche
z— annuler la dernière action intermédiaire
-
Appliquez vos modifications intermédiaires en enregistrant. Rien n’est modifié tant que vous n’avez pas enregistré.
Utilisez ctrl/cmd+s.
Si un conflit se produit lors de l’application, résolvez-le et exécutez-le
gh stack modify --continueou exécutezgh stack modify --abortpour restaurer l’état de pré-modification. -
Envoyez (push) les branches mises à jour et recréez la pile sur GitHub.
Shell gh stack submit
gh stack submit
Décompresser à partir du GitHub site web
Pour dissolution d’une pile à partir du site web, par exemple pour réorganiser ou réorganiser celle-ci, utilisez l’option Unstack sur la pile.
Unstacking supprime les demandes d’extraction ouvertes, brouillons et fermées de la pile. Chacune conserve sa branche de base actuelle, mais n’est plus liée aux autres, et les exigences de mappage de pile et de fusion de pile disparaissent de celles-ci.
Les demandes de tirage fusionnées et mises en file d’attente restent dans la pile. Une fois qu’une demande de tirage a été fusionnée ou qu’elle est mise en file d’attente pour la fusion, dans le cadre d’une pile, elle ne peut pas être empilée. Une pile est entièrement dissoute uniquement lorsqu’aucune de ses demandes de tirage n’a été fusionnée ou qu’elle est mise en file d’attente pour la fusion ; sinon, il persiste avec ces demandes de tirage toujours dans celui-ci.
Pour réorganiser ou restructurer une pile sans la résoudre, utilisez plutôt la gh stack modify commande. Voir Restructuration d’une pile.
Synchronisation de votre environnement local après fusion
Lorsqu’une demande de tirage (pull request) en bas de la pile fusionne, mettez à jour votre état local avec une seule commande de synchronisation. Pour supprimer automatiquement les branches locales pour les demandes de tirage fusionnées en même temps, ajoutez l’option --prune .
gh stack sync --prune
gh stack sync --prune
Cela extrait les dernières modifications, transfère rapidement la jonction, rebase les branches restantes sur celle-ci, envoie (push) les branches mises à jour et synchronise l’état de la demande de tirage à partir de GitHub.
Extraction des demandes de tirage ajoutées à la pile sur GitHub
Si quelqu’un d’autre ajoute des demandes de tirage à la pile GitHub, gh stack sync récupère les nouvelles branches et les ajoute à votre pile locale afin qu’elle reflète la pile distante. Une mise à jour à distance propre comme celle-ci est extraite automatiquement. Il est donc gh stack sync sûr de s’exécuter dans l’automatisation.
Résolution d’une pile divergente
Vos piles locales et distantes diffèrent quand aucune d’entre elles n’est une extension propre de l’autre, par exemple lorsque vous ajoutez une branche localement, tandis que différentes demandes de tirage sont ajoutées à la même pile sur GitHub. Lorsque cela se produit, gh stack sync ne peut pas fusionner les deux automatiquement. 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 les branches manquantes par les branches distantes. Si vous étiez sur une branche de la pile distante ne contient plus, vous êtes déplacé vers la branche la plus proche survivante. Cela nécessite une arborescence de travail propre sans modification non validée.
- Supprimez la pile sur GitHub. Supprime l’objet de pile activé GitHub et arrête la synchronisation. Vos demandes de tirage et vos branches locales ne sont pas touchées. Recréez la pile avec
gh stack submitlaquelle vous créez également des demandes de tirage pour toutes les branches que vous n’avez pas encore envoyées. Exécutez d’abordgh stack modifysi vous souhaitez modifier sa structure. - Annuler. Abandonne la synchronisation sans envoyer de branches ou mettre à jour les demandes de tirage( pull request).
Dans un terminal non interactif, tel que CI, une divergence abandonne la synchronisation sans envoyer de branches ou de mettre à jour les demandes de tirage. Résolvez-le en déstacking et recréez la pile.