Observação
Esse recurso está em versão prévia pública e está sujeito a alterações.
Uma pilha é uma série de solicitações de pull no mesmo repositório em que cada solicitação de pull direciona o branch da solicitação de pull abaixo dela, formando uma cadeia ordenada que cai em um único branch, normalmente seu branch principal. Em vez de uma solicitação de pull grande, você obtém um conjunto de solicitações de pull menores. Como cada solicitação de pull tem sua própria diferença de foco, os colegas de equipe podem examinar e aprovar cada camada de forma independente.
Cada solicitação de pull em uma pilha é avaliada em relação às regras para a base da pilha — normalmente — independentemente main de qual ramificação ela é direcionada diretamente. Isso significa que as solicitações de pull de pilha intermediária são mantidas no mesmo padrão que a solicitação de pull inferior.
Observação
- As solicitações de pull empilhadas exigem que todos os branches estejam no mesmo repositório. Não há suporte para pilhas entre bifurcações.
- Não há suporte para solicitações de pull empilhadas.GitHub Desktop
Disponibilidade de solicitações de pull empilhadas
A gh stackGitHub CLI extensão manipula o fluxo de trabalho de desenvolvimento local. Ele cria e rastreia branches na ordem de dependência correta, mantém branches rebased, envia branches, cria e vincula solicitações de pull e navega entre camadas.
GitHub CLI não é necessário. As operações git subjacentes são padrão e você pode criar pilhas do GitHub site.
Se você usar outras ferramentas, como Jujutsu ou Sapling, para gerenciar e enviar por push suas ramificações locais, você ainda poderá usar GitHub CLI ou o GitHub site para abrir uma pilha de solicitações de pull dessas ramificações. Consulte Usar outras ferramentas com solicitações de pull empilhadas.
Troncos para solicitações de pull empilhadas
O tronco de uma pilha é o branch base da solicitação de pull inferior. Todas as outras solicitações de pull na pilha são criadas sobre ela. O tronco usa como padrão o branch padrão do repositório, por mainexemplo, mas pode ser qualquer ramificação, como um branch de lançamento ou um branch de recursos de longa duração.
Para definir o tronco:
- De GitHub CLI passe a opção
--base BRANCHpara ogh stack initcomando (por exemplo,gh stack init --base release auth-layer). - GitHub No site, crie a solicitação de pull inferior em relação a qualquer ramificação desejada como o tronco. O restante da pilha se baseia nela.
As regras de proteção de ramificação, as verificações necessárias e a CI são avaliadas em relação a qualquer tronco direcionado à pilha, não apenas em relação ao branch padrão.
Proteções de ramificação e verificações necessárias
Todos os seguintes são avaliados como se cada solicitação de pull tivesse como destino a base de pilha, não o branch diretamente abaixo dela:
| Regra | Como ele é avaliado |
|---|---|
| Revisões obrigatórias | Avaliado em relação à base de pilha. |
| Verificações de status necessárias | Avaliado em relação à base de pilha. |
| CODEOWNERS | Avaliado a partir da base de pilha. Altera em CODEOWNERS uma solicitação de pull inferior, mas não afeta as solicitações de pull acima dela. |
| Fluxos de trabalho de verificação de código | Avaliado em relação à base de pilha. |
GitHub Actions
GitHub Os fluxos de trabalho de ações disparam como se cada solicitação de pull na pilha tivesse como destino a base da pilha. Um fluxo de trabalho configurado para execução main em pull_request eventos direcionados é executado para cada solicitação de pull na pilha, não apenas para a parte inferior, portanto, nenhuma alteração de fluxo de trabalho é necessária.
Metadados de pilha, como o branch base da pilha, estão disponíveis em expressões de fluxo de trabalho por meio de github.event.pull_request.stack. Essa propriedade só está presente quando a solicitação de pull pertence a uma pilha.
Para obter o conjunto completo de campos de metadados e padrões para reduzir o uso redundante de CI, consulte Otimizando a CI para solicitações de pull empilhadas.
Requisitos de mesclagem
Antes que uma solicitação de pull em uma pilha possa mesclar, todos os seguintes devem ser verdadeiros:
- A solicitação de pull atende a todos os requisitos de proteção de branch para a base de pilha, incluindo revisões necessárias, verificações de status necessárias e aprovações CODEOWNER.
- Todas as solicitações de pull abaixo dela na pilha também atendem a esses requisitos.
- A pilha tem um histórico totalmente linear entre seus branches.
Por exemplo, na pilha main ← PR1 ← PR2 ← PR3, mesclar PR #3 requer PR #1 e PR #2 para também passar verificações, ter revisões necessárias e atender a todas as regras de proteção de branch.
Métodos de mesclagem
As pilhas dão suporte a todos os três métodos de mesclagem. Em cada caso, o pull solicita a terra como uma única operação atômica:
- A confirmação de mesclagem cria uma confirmação de mesclagem para todo o grupo de solicitações de pull que está sendo mesclada, preservando o histórico de confirmação completo de cada solicitação de pull.
- Squash cria uma confirmação limpa e esmagada por solicitação de pull. A mesclagem
nde solicitações de pull crianconfirmações esmagadas no branch base. - A rebase repete as confirmações de cada solicitação de pull no branch base, criando um histórico linear sem confirmações de mesclagem.
Mesclar por meio de uma fila de mesclagem
As pilhas dão suporte total a filas de mesclagem. Todas as solicitações de pull na pilha são adicionadas à fila na ordem correta. Se uma solicitação de pull for removida ou ejetada da fila, todas as solicitações de pull acima dela na pilha também serão removidas.
Observação
Para manter uma pilha unida, a fila de mesclagem permite que o grupo de mesclagem exceda seu tamanho máximo configurado em até 50%. Se a pilha for muito grande para caber dentro desse buffer, ela será dividida automaticamente entre grupos de mesclagem consecutivos.
Histórico linear
Um histórico totalmente linear entre cada branch na pilha é um requisito estrito para mesclagem. Uma pilha pode perder seu histórico linear quando as alterações são enviadas por push para um branch inferior ou quando o tronco avança.
Para restaurar um histórico linear, execute uma rebase em cascata:
- Na CLI — executar
gh stack rebasee, em seguida, efetuar push comgh stack push. - GitHub No site — clique em Rebase stack na caixa de mesclagem para disparar uma rebase em cascata do lado do servidor.
Para obter instruções, consulte Gerenciando solicitações de pull empilhadas.