Observação
Esse recurso está em versão prévia pública e está sujeito a alterações.
À medida que você itera em uma pilha, muitas vezes você precisa fazer alterações em uma camada inferior, se basear novamente para manter um histórico linear ou reestruturar seus branches. A gh stack extensão lida com essas tarefas com operações em GitHub CLI cascata que atualizam todas as ramificações afetadas. Consulte Comandos da CLI de solicitações de pull empilhadas.
Fazendo alterações em uma camada inferior
Quando você estiver trabalhando na camada superior e precisar alterar algo mais baixo na pilha, faça a alteração no branch em que ela pertence e rebasee, em vez de trabalhar em torno dela na camada atual.
-
Navegue até o branch que precisa da alteração.
Shell gh stack down
gh stack downVocê também pode fazer check-out de um branch específico com
gh stack checkout BRANCH-NAME. -
Faça a alteração e confirme-a.
Shell git add . git commit -m "helpful-commit-message"
git add . git commit -m "helpful-commit-message" -
Basear novamente os branches acima para pegar a alteração.
Shell gh stack rebase --upstack
gh stack rebase --upstack -
Envie por push as ramificações atualizadas e retorne para onde você estava trabalhando.
Shell gh stack push gh stack top
gh stack push gh stack top
Rebasing sua pilha
Uma pilha deve ter um histórico linear entre seus branches antes de poder mesclar. A execução gh stack rebase executa uma rebase em cascata em que cada ramificação é rebased na parte superior do branch abaixo dela, a partir dele main, de modo que cada ramificação pega as alterações mais recentes de todas as camadas inferiores.
-
Basear novamente a pilha. Por padrão, isso rebaseia todas as ramificações da parte inferior para a parte superior.
Shell gh stack rebase
gh stack rebasePara limitar a rebase, use
--downstackpara se basear novamente da camada mais baixa até o branch atual ou--upstackpara se basear novamente do branch atual até a parte superior. -
Envie por push as ramificações atualizadas. Isso usa
--force-with-leasepara atualizar com segurança as ramificações rebased.Shell gh stack push
gh stack push
Se uma rebase encontrar um conflito, gh stack rebase pare e liste os arquivos conflitantes.
- Resolva os marcadores nos arquivos afetados, prepare-os com
git adde executegh stack rebase --continue. - Para começar, execute
gh stack rebase --abortpara restaurar todos os branches para seu estado de pré-rebase.
Observação
Você também pode disparar uma rebase do lado do servidor da solicitação de pull, mas essas confirmações não são assinadas. Se o repositório exigir confirmações assinadas, rebasee para GitHub CLI que as confirmações sigam a configuração de assinatura de confirmação do Git local.
Rebasing do GitHub site
Quando uma pilha não é linear, um botão de pilha rebase é exibido na caixa de mesclagem. Selecioná-lo dispara uma rebase em cascata do lado do servidor que:
- Rebases a pilha inteira em cima do tronco mais recente, como
main. - Rebaseia cada branch não mesclado na parte superior de seu branch base, trabalhando da parte inferior da pilha para cima.
- Efetua push de cada branch rebased para atualizar o remoto.
Depois que a rebase for concluída, cada solicitação de pull refletirá os branches atualizados e as verificações de CI serão disparadas novamente.
Observação
As confirmações criadas por uma rebase do lado do servidor não são assinadas. Se o repositório exigir confirmações assinadas, recue para GitHub CLI que gh stack rebase as confirmações sigam a configuração de assinatura de confirmação do Git local e, em seguida, envie por push com gh stack push.
Reestruturar uma pilha
Talvez você queira alterar a composição de uma pilha. Por exemplo, se você precisar soltar um branch, combinar branches, inserir um branch, reordenar ou renomear, use o comando gh stack modifyinterativo.
Antes de executar gh stack modify, verifique o seguinte:
- Você tem uma pilha ativa com check-out.
- Sua árvore de trabalho está limpa.
- Nenhuma rebase está em andamento.
- Nenhuma solicitação de pull é enfileirada para mesclagem.
- O histórico de confirmação é linear.
-
Abra a interface do usuário do terminal de modificação.
Shell gh stack modify
gh stack modify -
Selecione um branch e prepare uma operação. A reordenação e as alterações estruturais (soltar, dobrar, inserir, renomear) não podem ser misturadas na mesma sessão.
x— solte um branch e suas confirmaçõesd— dobre a ramificação na que está abaixo delau— dobre a ramificação na que está acima delai/I— insira um novo branch abaixo ou acima do cursorr— renomeie um branch- Shift+ / ↑Shift+↓ — reordenar uma ramificação
z— desfazer a última ação em etapas
-
Aplique as alterações em etapas salvando-as. Nada é modificado até você salvar.
Use ctrl/cmd+s.
Se ocorrer um conflito durante a aplicação, resolva-o e execute-o
gh stack modify --continueou execute-ogh stack modify --abortpara restaurar o estado de pré-modificação. -
Envie por push os branches atualizados e recrie a pilha.GitHub
Shell gh stack submit
gh stack submit
Desempredando do GitHub site
Para dissolver uma pilha do site, por exemplo, para reordená-la ou reorganizar, use a opção Unstack na pilha.
O descomprupamento remove as solicitações de pull abertas, de rascunho e fechadas da pilha. Cada um mantém seu branch base atual, mas não está mais vinculado aos outros, e os requisitos de mesclagem de pilha e de mapa de pilha desaparecem deles.
As solicitações de pull mescladas e enfileiradas permanecem na pilha. Depois que uma solicitação de pull é mesclada ou enfileirada para mesclagem, como parte de uma pilha, ela não pode ser descompilhada. Uma pilha é dissolvida inteiramente somente quando nenhuma de suas solicitações de pull foi mesclada ou está na fila para mesclagem; caso contrário, ele persistirá com essas solicitações de pull ainda nele.
Para reordenar ou reestruturar uma pilha sem dissolvê-la, use o gh stack modify comando em vez disso. Consulte Reestruturar uma pilha.
Sincronizando seu ambiente local após mesclagens
Quando uma solicitação de pull na parte inferior da pilha se mescla, atualize o estado local com um único comando de sincronização. Para podar automaticamente branches locais para solicitações de pull mescladas ao mesmo tempo, adicione a opção --prune .
gh stack sync --prune
gh stack sync --prune
Isso busca as alterações mais recentes, encaminha rapidamente o tronco, rebaseia os branches restantes nele, envia por push os branches atualizados e sincroniza o status da solicitação de pull.GitHub
Puxando solicitações de pull adicionadas à pilha em GitHub
Se outra pessoa adicionar solicitações de pull à pilha GitHub, gh stack sync busque os novos branches e acrescente-os à pilha local para que ele espelha o controle remoto. Uma atualização remota limpa como essa é retirada automaticamente, portanto gh stack sync , é segura para ser executada na automação.
Resolvendo uma pilha divergente
Suas pilhas locais e remotas divergem quando nenhuma das duas é uma extensão limpa da outra, por exemplo, quando você adiciona uma ramificação localmente enquanto diferentes solicitações de pull são adicionadas à mesma pilha.GitHub Quando isso acontece, gh stack sync não é possível mesclar os dois automaticamente. Em um terminal interativo, ele oferece três opções:
- Use a pilha remota como a fonte da verdade. Substitui a composição da pilha local pelos controles remotos, puxando os branches ausentes. Se você estava em um branch que a pilha remota não contém mais, você é movido para o branch sobrevivente mais próximo. Isso requer uma árvore de trabalho limpa sem alterações não confirmadas.
- Exclua a pilha em GitHub. Exclui o objeto GitHub de pilha e interrompe a sincronização. Suas solicitações de pull e ramificações locais não são intocadas. Recrie a pilha com
gh stack submit, que também cria solicitações de pull para quaisquer branches que você ainda não enviou. Executegh stack modifyprimeiro se você quiser alterar sua estrutura. - Cancelar. Anula a sincronização sem enviar branches por push ou atualizar nenhuma solicitação de pull.
Em um terminal não interativo, como CI, uma divergência anula a sincronização sem enviar branches por push ou atualizar solicitações de pull. Resolva-o descompilhando e recriando a pilha.